Item 13:用 vector 和 string 替代动态分配的数组。
Item 15:注意 string 的多种实现方法。
Item 17:使用 “the swap trick” 整理(trim)额外的空间。
Item 18:避免使用 vector<bool>
- 大多数的 STL 实现中 string 用到了引用计数,避免引用计数的方法是用 vector<char> 替代。
Item 15:注意 string 的多种实现方法。
- 作者从 sizeof(string) 发现不同版本的 string 有不同的值,从而发现 string 有各种各样的实现,可是我们需要知道么?
- 对于 vector:&vec[0]
- 对于 string:str.c_str() 或者 str.data()
- string::c_str() 返回的数据(which is const)不能够被修改。
- vector 中的数据只能修改,而不能添加或者删除,绝不能在 vector 的未初始化区域创建对象。
Item 17:使用 “the swap trick” 整理(trim)额外的空间。
- string(s).swap(s); // 处理额外的空间。
- string().swap(s); // 清除 string 的内容,并且将其 capacity 归零。
Item 18:避免使用 vector<bool>
- vector<bool> 不是标准容器(准标准),因为其不符合标准容器规定,即函数 &vec[0] 不能调用。因为 vector<bool> 内部用 1 bit 存储一个 bool,而不是用 byte 存储。
- 用 std::bitset 或者 std::deque<bool> 替代。