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));