Effective STL
Effective STL是Scott Meyers所著的一本书,主要介绍STL(Standard Template Library)的使用和优化技巧。本书共有15个Item,涵盖了STL容器的选择、使用和优化等方面的知识点。
Item 1: 选择合适的容器
在STL中有多种容器可供选择,每种容器都有其特点和优缺点。例如,vector适用于频繁插入和删除元素的场景,而list适用于频繁遍历元素的场景。因此,在选择容器时,需要根据实际情况进行选择。
Item 2: 警惕容器独立代码的幻象
STL容器提供了许多通用的函数接口,例如push_back、insert和erase等,但是这些函数并不是通用的,需要根据具体情况进行选择。例如,vector和list的push_back函数实现不同,vector的push_back函数将元素添加到容器末尾,而list的push_back函数将元素添加到容器头部。
Item 3:确保对象拷贝的正确性和高效性
在STL容器中,对象的拷贝是非常重要的,需要确保对象的拷贝正确性和高效性。例如,在vector中,对象的拷贝需要使用元素的拷贝构造函数,否则可能会出现意外的结果。
Item 4: 使用empty()函数代替size()函数
在STL容器中,empty()函数可以用于判断容器是否为空,而size()函数可以用于获取容器的大小。使用empty()函数可以避免一些不必要的计算。
Item 5: 优先选择成员函数
在STL容器中,成员函数可以提供更多的功能和灵活性。例如,vector的push_back函数可以将元素添加到容器末尾,而insert函数可以将元素添加到容器的任意位置。
Item 6: 警惕C++的parse问题
C++的parse问题是指编译器在解析代码时可能出现的歧义问题。例如,在STL容器中,括号的使用可能会导致parse问题。
Item 7: 删除指针之前需要释放内存
在STL容器中,指针的使用需要特别注意,需要在删除指针之前释放内存,避免内存泄露。
Item 8: 不要创建auto_ptr容器
auto_ptr是C++中的智能指针,但是它不能用于STL容器,因为auto_ptr的销毁机制与STL容器不兼容。
Item 9: 选择适合的擦除选项
STL容器提供了多种擦除选项,例如erase函数可以删除容器中的元素,需要根据实际情况选择合适的擦除选项。
Item 10: 了解分配器约定和限制
STL容器使用分配器来管理内存,需要了解分配器的约定和限制,例如分配器的线程安全性和内存管理机制。
Item 11: 了解自定义分配器的合法使用
自定义分配器可以提供更多的灵活性和可扩展性,但是需要了解其合法使用,例如自定义分配器的线程安全性和内存管理机制。
Item 12: 对STL容器的线程安全性有合理的期望
STL容器的线程安全性是一个复杂的问题,需要对其有合理的期望和理解,例如STL容器的锁机制和线程安全机制。
Item 13: vector和string的使用
vector和string是STL容器中最常用的两个容器,需要了解其使用和优化技巧,例如vector的reserve函数可以预先分配内存,提高性能。
Item 14: 使用reserve函数避免不必要的reallocations
vector的reserve函数可以预先分配内存,避免不必要的reallocations,提高性能。
Item 15: 警惕变异的出现
STL容器中的变异可能会导致意外的结果,需要警惕变异的出现,例如vector的resize函数可能会导致变异。
Effective STL为读者提供了STL容器的使用和优化技巧,帮助读者更好地理解和使用STL容器。