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));
转载于:https://blog.51cto.com/jarvis365/1324126