[C++] 幾個基本的標準庫類型

using 命名空間

using namespace std;
using std::cin; using std::cout;    //只能使用cin,cout


頭文件中不要包含using聲明


string類型

初始化

基本操作:size(),empty(),下標[]等

字典序比較:<,>等

getline(cin, str); //讀到一行的回車,存到str中但不保存回車

string::size_type :無符號,足夠保存長度


vector類型

初始化

vector<My_Type> t1;
vector<int> ivec1(10, -1);    //十個-1
vector<int> ivec2(11);        //十一個默認0
vector<int> iv3c3{10, -1};    //10和-1

vs2010不支持{}


vector的效率問題

暫略


基本操作:=, ==, >, push_back(t),[]只用於訪問,修改

確保下標合法,防止溢出


迭代器

訪問容器中的元素

auto b = v.begin();    //指向首元素
atuo e = v.end();      //指向尾後元素


類型爲vector<int>::iterators

vector<int>::const_iterators,只能讀不能寫


實際樣例

vector<char> str(10, 'f');
for(auto it = str.begin(); it != str.end(); it++)
    cout << (char)toupper(*it);

不要在使用迭代器在循環體中訪問的容器中添加元素,可能會導致迭代器失效


迭代器運算

直接加減,可以用不等號比較,越靠後越大。

相減得到的類型爲dfference_type,表示距離。


簡單的二分搜索

auto b = vint.end(), f = vint.begin();
    auto mid = f + (b - f) / 2;
    int num;
    cin >> num;
    while(f <= b && mid != vint.end())
    {
        if(*mid == num)
        {
            cout << "success" << endl;
            break;
        }
        else if(*mid < num)
        {
            f = mid + 1;
        }
        else if(*mid > num)
        {
            b = mid - 1;
        }
        mid = f + (b - f) / 2;
    }
    if(f > b || mid == vint.end())
        cout << "failed" << endl;


使用數組爲vector初始化

int intarr[] = {1, 2, 3, 4, 5};
vector<int> vec1(intarr, intarr + 5);
vector<int> vec2(begin(intarr), end(intarr));


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