- 头文件不应包含using声明。
- C++标准一方面对库类型所提供的操作做了详细规定,另一方面也对库的实现者做出了一些性能上的需求。因此,标准库类型对于一般应用场合来说有足够的效率。
- 如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化(copy initialization),编译器把等号右侧的初始值拷贝到新创建的对象中去。与之相反,如过不使用等号,则执行的是直接初始化(direct initialization)。
- getline函数从给定的输入流中读入内容,知道遇到换行符为止(注意换行符也读进来了),然后把所读的内容存入到那个string对象中去(注意不存换行符)。
- string::size()函数返回的是一个string::size_type类型的值。
- "Hello"<"Hello World"。
- 由于某些历史原因,也为了与C兼容,所以C++语言中的字符串字面值并不是标准库类型string的对象。切记,字符串字面值与string是不同的类型。
- 确保下标合法的一种有效手段就是尽可能使用范围for语句。
- 如果容器为空,begin和end返回的是同一个迭代器,都是尾后迭代器。
- 迭代器这个名词有三种不同的含义:可能是迭代器概念本身,也可能是指容器定义的迭代器类型,还可能是指某个迭代器对象。
- 虽然vector对象可以动态地增长,但是也会有一些副作用。已知的一个限制是不能在范围for循环中向vector对象添加元素。另外一个限制是任何一种可能改变vector对象容量的操作,比如push_back,都会使该vector对象的迭代器失效。
- 和vector一样,数组的元素应为对象,因此不存在引用的数组。
- 要想防止数组下标越界,除了小心谨慎注意细节以及对代码进行彻底的测试之外,没有其他好办法。
- 当使用数组作为一个auto变量的初始值时,推断得到的类型是指针而非数组。当使用decltype关键字时转换不会发生,返回的类型是数组。
- 标准库类型限定使用的下标必须是无符号类型,而内置的下标运算无此要求。
int a[] = {0,2,4,6,8}; int *p = &a[2]; // p指向索引为2的元素 int k = p[-2]; // p[-2]是a[0]表示的那个元素
- 尽管C++支持C风格字符串,但在C++程序中最好还是不要使用它们。这是因为C风格字符串不仅使用起来不太方便,而且极易引发程序漏洞,是诸多问题的根本原因。对大多数应用来说,使用标准库string要比使用C风格字符串更安全、更高效。
- 如果执行完string::c_str()函数后程序想一直都能使用其返回的数组,最好将该数组重新拷贝一份。
- 现代的C++程序应尽量使用vector和迭代器,避免使用内置数组和指针;应该尽量使用string,避免使用C风格的基于数组的字符串。
- 要使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型,否则会被系统自动转换为指针类型。
- C风格字符串(C-style string),以空字符结束的字符数组。
第三章 字符串、向量和数组
最新推荐文章于 2024-02-07 14:47:46 发布