1、头文件不应该包含using声明
2、直接初始化string(str)or string(num,'char');拷贝初始化:string str = str2;
3、getling(cin,line)读取一行直到遇到第一个换行符读取并丢弃换行符
4、如果一条语句中有size()函数,就不用int避免混用
5、string类型加法必须要有一个 string对象,多个相加时考虑运算顺序判断是否合法,字符串字面量不是string类型
6、string类型大小比较小写字母比大写字母大,顺序靠后的大
7、C++版的C标准库头文件:cname;eg: math.h: cmath;
8、范围for(range for) eg: for(auto c: str)
9、如果要用for该变string中的元素: for(auto &c : str);必须把循环变量定义为引用类型
10、使用下标运算符必须先确保下标的有效性
11、vector:确认无法执行列表初始化后,编译器会尝试默认值初始化vector对象
12、vector对象以及string对象的下标运算符可以访问已存在的元素,但不能用于添加值
13、习惯使用 == 和 != ,因为所有的容器都定义了== 和 !=; iterator const_iterator
14、迭代器的三种含义:迭代器概念本身;容器定义的迭代器类型;某个迭代器对象
15、但凡使用了迭代器的循环体,都不要向迭代器所属的容器添加元素;
16、迭代器运算必须是同一个容器中的迭代器
17、遍历数组的元素最好也是使用范围for语句
18、使用数组初始化vector:指明数组的首地址和尾后地址
19、指针和数组:
当使用数组作为auto变量初始值时推断得到的类型是指针
当使用decltype关键字时不会发生上述转换
20、内置下标运算符所用的索引值不是无符号类型,与vector和string 不一样
21、允许使用以空字符结束的字符数组来初始化string 对象或为string 对象赋值
在string对象的加法运算中允许以空字符结束的字符数组作为其中一个运算对象(不能两个都是)
在string 运算的复合赋值运算中允许使用以空字符结束的字符数组作为右侧的运算对象。
22、const char *str = s.c_str(); 后续的改变了s的值可能是返回的地址失效,解决办法是,将该数组重新拷贝一份;
23、使用范围for语句处理多维数组,除了最内层的循环外其他所有的循环的控制变量都应该是引用类型。因为auto不使用引用会声明为指针