- 不应该在头文件中使用
using
,因为会改变所有引用该头文件的文件 string
变量的复制是拷贝不是仅仅复制引用string
类型的size
以及length
方法没有任何区别,一开始只有length
方法,后来为了兼容STL,所以引入了size
方法- 由于历史原因,c++中的字符串字面量的类型并不是
string
,但是string
类型依然可以直接与字面量进行相加的操作,字面量会自动进行转换 - 基于范围的for循环在遍历时使用引用变量从而能够在遍历过程中修改遍历对象,同时也能够避免不必要的复制。而且在遍历多维数组的时候,为了能够保留作为数组的相关信息,使得能够在内层正确遍历,除了最里面一层之外的循环都需要使用引用
1
2
3for (auto c : str) {
cout <<c << endl;
}1
2
3
4
5for (auto &c : str) {
if (isalnum(c)) {
c = '';
}
} - 对vector的复制同样是拷贝而不是复制引用,嵌套vector同样如此
- 在使用for循环遍历容器的时候,判断条件一般都使用
!=
而不是<
,由于所有的标准库容器以及迭代器都定义了==
以及!=
,但并不是都定义了<
,所以应该养成习惯使用!=
作为终止条件 cbegin()
以及cend()
返回普通迭代器的const
版本,不论容器本身是否为const
,通过该迭代器均为只读- 某种程度上可以认为c++中的struct支持类方法,所以对
->
操作符进行了相应的拓展,使其不仅能够通过指针访问成员,也可以通过指针访问类方法,当我们定义一个vector<string>
的迭代器iter
的时候,我们既可以使用(*iter).empty()
也可以使用iter->empty()
- 不要在范围for循环中改变容器的大小
- 使用
string
类型的c_str
方法,可以得到一个C类型的字符数组,但是不能保证该字符数组一直有效,比如说对string进行了修改就有可能导致其失效,所以最好是在调用了c_str
之后对得到的字符数组进行手动的拷贝
C++ Primer Ch3
- 本文链接: https://hustergs.github.io/archives/e5e656c.html
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!