C++相關shared_ptr, string和int long等互相轉換,map相關,刪除文件,CHECK_XX,文件流控制參數ios設置

shared_ptr

使用shared_ptr必須定義包含文件

#include <boost/shared_ptr.hpp>
#include <memory>

並做聲明

using boost::shared_ptr;

string 和 int long 等相互轉換

to string

string to_string (int val);

string to_string (long val);

string to_string (long long val);

string to_string (unsigned val);

string to_string (unsigned long val);

string to_string (unsigned long long val);

string to_string (float val);

string to_string (double val);

string to_string (long double val);

string -> int/long

std::stoi
std::stol
std::stoll

map

map.begin()指向map的第一個元素,而 map.end()指向map的最後一個元素之後的地址,無論執行map.erase(iter)還是map.add(key, value),map.end()所返回的值永遠不會發生變化,都是指向同一塊內存。

map.lower_bound()返回的是大於某個鍵值的元素
map.upper_bound()返回的是不小於某個鍵值的元素

不過在具體編程過程中,如果設置爲降序排列,lower_bound的返回值就不是map中的元素
map的第三個參數的意義和map.size的含義

template < class Key,                                     // map::key_type
           class T,                                       // map::mapped_type
           class Compare = less<Key>,                     // map::key_compare
           class Alloc = allocator<pair<const Key,T> >    // map::allocator_type
           > class map;

less_equal是按key值升序排列,greater_equal是降序排列,而同一個key值後面跟的值按照降序排列

map.size()返回的是哈西對的個數,key和T有一個不同即爲不同對

#include <iostream>
#include <map>
#include <functional>

using namespace std;

int main()
{
        map<int, int, greater_equal<int>> m_greater;
        map<int, int, less_equal<int>> m_less;
        for(int i = 15; i < 20; i ++)
                for(int j = 45; j < 50; j ++)
                {
                        m_greater.emplace(i, j);
                        m_less.emplace(i, j);
                }

        cout << "m_greater: " << endl;
        for(auto &c: m_greater)cout << c.first << "->"<< c.second << endl;
        cout << "m_less: " << endl;
        for(auto &c: m_less)cout << c.first << "->"<< c.second << endl;
        cout << "map.size(): " << m_greater.size() << "," <<  m_less.size() << endl;
}

結果如下:

CHECK_XX

\#define CHECK_EQ(val1, val2) CHECK_OP(_EQ, ==, val1, val2)
\#define CHECK_NE(val1, val2) CHECK_OP(_NE, !=, val1, val2)
\#define CHECK_LE(val1, val2) CHECK_OP(_LE, <=, val1, val2)
\#define CHECK_LT(val1, val2) CHECK_OP(_LT, < , val1, val2)
\#define CHECK_GE(val1, val2) CHECK_OP(_GE, >=, val1, val2)
\#define CHECK_GT(val1, val2) CHECK_OP(_GT, > , val1, val2)

使用宏定義定義檢測val1和val2的值,若不符合定義的符號則返回錯誤信息

刪除文件

使用remove函數

remove("~\files\1.txt")

文件流控制時參數設置

ios::in 爲輸入(讀)而打開一個文件

ios::out //爲輸出(寫)而打開文件 
ios::ate //初始位置:文件尾 
ios::app //所有輸出附加在文件末尾 
ios::trunc //如果文件已存在則先刪除該文件 
ios::binary //二進制方式

bug error: passing ‘XXX’ as ‘this’ argument of ‘XXX’

C++中const 引用的是對象時只能訪問該對象的const 函數,因爲其他函數有可能會修改該對象的成員,編譯器爲了避免該類事情發生,會認爲調用非const函數是錯誤的,即const函數只能調用const函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章