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()和<号时,最好内联。