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