Effective STL 读书笔记 3
2006-03-21 23:43
295 查看
Item 13:用 vector 和 string 替代动态分配的数组。
大多数的 STL 实现中 string 用到了引用计数,避免引用计数的方法是用 vector<char> 替代。
Item 14:使用 reserve 避免不必要的内存重分配。
Item 15:注意 string 的多种实现方法。
作者从 sizeof(string) 发现不同版本的 string 有不同的值,从而发现 string 有各种各样的实现,可是我们需要知道么?
Item 16:了解如何将 vector 和 string 中的数据传送给遗留的(C code liked)API。
对于 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> 替代。
大多数的 STL 实现中 string 用到了引用计数,避免引用计数的方法是用 vector<char> 替代。
Item 14:使用 reserve 避免不必要的内存重分配。
Item 15:注意 string 的多种实现方法。
作者从 sizeof(string) 发现不同版本的 string 有不同的值,从而发现 string 有各种各样的实现,可是我们需要知道么?
Item 16:了解如何将 vector 和 string 中的数据传送给遗留的(C code liked)API。
对于 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> 替代。
相关文章推荐
- 读书笔记-effective STL
- Effective STL 读书笔记 2
- effective STL 读书笔记——第一章:容器
- 《Effective STL》读书笔记
- Effective STL 读书笔记
- Effective STL 读书笔记 1
- Effective STL 读书笔记 4
- 读书笔记之:Effective STL
- Effective STL 读书笔记 9
- effective STL 读书笔记——第二章:vector和string
- Effective STL 读书笔记 5
- 《Effective STL》读书笔记之容器1-5
- effective stl 读书笔记
- Effective STL 读书笔记 6
- 《Effective STL》读书笔记
- 《Effective STL》读书笔记
- 《Effective STL》读书笔记
- Effective STL 读书笔记
- Effective STL 读书笔记之慎重选择删除容器元素的方法
- effective STL 读书笔记——第三章:关联容器