首页 > 代码库 > c++ STL 工程实践的15条建议

c++ STL 工程实践的15条建议

STL是c++非常重要的一部分,它是很多大神的杰作,高效,稳定,可扩展性好,虽然STL确实存在难以调试,内存碎片的问题(现在机器的内存越来越大,内存碎片的问题基本不太可能成为系统瓶颈,但只要你使用恰当,它能显著提高生产力,并使代码更短,更易维护。

而在工程中,如果不养成好的使用习惯,也容易造成一些问题!

而自己在工程实践中,总结了一些建议

1.  vector, map, set, list, queue, dequeue, stack 等容器存放的对象必须是可拷贝的,尤其注意深拷贝的情况,必须自己重载拷贝构造函数和=号, 最后对象仅仅只有数据成员,且数据成员没有指针。

2. vector, map, set, list, queue, dequeue, stack 等容器存放的对象最好不要是指针,因为多线程环境,对指针操作非常危险,也容易造成内存泄漏的问题,即使存放指针,最好使用智能指针。

3. 定义容器对象,最好在栈空间定义。

4. 尽量不定义全局的容器对象,即使要使用全局的容器,最好使用全局指针,并在某函数内new一个。

5.在栈空间最好定义容器对象,而不是使用容器指针,容器对象可以自动析构。

6.map的key最好是整形或者是string, 最好不要是指针类型;能不自己重载函数对象或者小于号的,就不要去重载,使用默认的。

7.set最好存单一数据类型,整形或者string, 如果是复杂数据,可以使用map替代会更加清晰。

8.判断一个容器是否为空,适应empty()  而不是 size() == 0。

9.vector在预知大致范围时候尽量先reserve, 这样可以在很多时候大大提高程序效率。

10.能用string的尽量不用char数组,除非一些特定需要和性能要求极高的情况。

11.能用STL的sort, partial_sort, 等标准算法的,尽量用STL算法。

12.多线程操作容器时尽量使用容器指针,而不是容器对象,对容器操作对指针加锁。

13.最好使用容器引用作为函数参数,减少拷贝。

14.尽量使用标准STL容器,除非特殊情况使用hash_map等扩展容器。

15.在重载函数对象operator()和<号时,最好内联。




c++ STL 工程实践的15条建议