Accelerated cpp chapter10 管理内存和低级数据结构

 1 指针是一种随机存取的迭代器 。因此,如果想把标准库的算法应用到数组 上,那么在任何使用begin()和end()以使得标准库算法可以访问到容器中元素的地方都用数组相应的指针代替就可以了。

 2 字符串常量 中不允许存在连续的多个或两个问号。因此,如果需要在字符串常量中表示连续的问号,需要在后面的问号前加上反斜杠/。如"?/?/?"。

 

 3 C++中,可以使用cerr或者clog来进行标准错误流输出。这两个输出流的最终目的都一样,不过他们的缓冲策略不同。

    clog倾向于生成日志,因此clog流和cout流有一样的缓冲特性:平时存储错误信息,当系统认为适当的时候将这些信息输出;

    cerr流则是无缓冲即时输出错误信息,可以保证一发生一场,就及时显示错误信息;

    因此,如果要及时反映错误的话,使用cerr;而要生成日志,则使用clog。

 

 4 C++使用ifstream和ofstream进行文件的输入输出,而标准库函数中的输入输出都是按照istream和ostream流对象进行的。但是,ifstream和ofstream都被精确定义为istream和ostream的一种。因此,在任何使用istream和ostream的地方,都可以使用ifstream和ofstream。

 

 5 ifstream和ofstream会要求提供一个指向以空字符结尾的字符数组的首元素的指针,而不是一个string对象,这是因为:

  (1)可以是程序使用到输入输出库的特性而不依赖与string类的特性;

  (2)输入输出库出现比string类早;

  (3)更易于与操作系统的输入输出函数之间建立接口,一般它们之间都是通过指针来通信的。

   如果不想把文件名定义为字符串常量,可以把文件名存储在string类型的变量中,然后使用c_str()成员函数进行参数传递。

 

 6 声明一个类型为T的数组,如果该数组是局部数组,则各个元素将被默认 初始化。即:

    如果T是内建类型,则被分配空间但不初始化;

    如果T是类,则被调用缺省构造函数;

    如果T是自定义类型,且不支持默认初始化(无缺省构造函数),则编译器停止工作。

 

 7 一般来说,数组至少要有一个元素。但当使用new T[n]来为一个数组分配内存且n为0时,数组中根本没有元素,new函数无法返回一个指向首元素的指针,此时new函数会返回一个有效 但是无意义的off-the-end指针,并且该指针可以被delete[] 作为参数使用。返回的指针仍然是合法 的指针,可以正常使用,方便编程。

你可能感兴趣的:(Accelerated cpp chapter10 管理内存和低级数据结构)