目录
1.cin
cin >> s
①读取并忽略开头所有的空白字符
②读取字符直到再次遇到空白字符停止
2.getline
遇到换行符停止
string line;
getline(cin, line); //读取内容保存至line中,不包含换行符
3.string
①计算string的长度时,定义的长度变量和索引变量最好定义为string::size_type类型而非int类型,由于int 存储的长度可能溢出。
②字符串s2后面追加s1
s2 += s1;
③sting中的+操作符的左右操作数必须至少有一个是string类型的。
string s1 = "hello";
string s2 = s1 + "world"; //正确
string s3 = "hello" + "world"; //错误
string s4 = s1 + " " + "world"; //正确
4.vector
①vector不是一种数据类型,而是一个类模板。vector<int>,vector<string>才是数据类型。
②string 和 vector都可以有=, == ,!=, <=,<操作比较两个vector或是string。
③c++中习惯用 != 而不是 < 来编写循环判断条件。
5.迭代器
①所有的标准库容器都定义的相应的迭代器类型,更常用此方法遍历。
vector<int>::iterator iter = arr.begin(); //指向第一个元素的位置 iter理解成一个指针
arr.end(); //指最后一个元素的下一个
②可以用 == 和 != 操作符比较两个迭代器,若两个迭代器指向同一个元素,则它们相等,否则不等。
③const_iterator定义的变量,只能读取容器内的元素值,不可以修改其值。
const vector<int> ::iterator:指的是迭代器所指的位置不能发现变化。
注意:vector<int> const_iterator 和 const vector<int> iterator 的区别
6.bitset
①包含头文件 #include<bitset> using std::bitset;
②bitset类型对象的区别仅在其长度而不在其类型。
bitset<32>bitvec; //定义32位,为0
//以0开始的位是低阶位,以31结束的位是高阶位
bitset<64>bitvec2(0xffff); //0-31置为1,32-63置为0
③用string对象初始化bitset对象:string对象直接表示为位模式,从string对象读入位集的顺序是从右向左。
string strval("1100");
bitset<32>bitvec3(strval); //只有第2位和第3位为1,其他都为0
④方法
b.any(); //b中存在1的二进制位返回true,否则false
b.count(); //b中1的二进制位个数
b.size(); //b的二进制位数
b[idx]; //访问idx处的二进制位
b.set(); //二进制中的所有位都置为1
b.reset(); //二进制中的所有位都置为0
b.flip(); //二进制中的所有位取反
b.flip(idx);//二进制中的idx位取反
b.to_ulong(); //返回一个unsigned long的值