Effecective STL: 容器 (条款1: 小心选择你的容器)
[缘起] 最近一直在学习STL,从《C++标准库(The C++ Standard Library)》到《STL 源码剖析》再到《泛型编程与STL(Generic Programming and the STL)》,自认为对STL有一定认识。为了让自己有进一步的提高,试着翻译这部《Effective STL》,错误再所难免,欢迎大家批评指正,我的email是smart_ttc@yahoo.com.cn, 有任何想法或错误请发信给我。在翻译过程中,我会根据自己的理解,对原文有一些增删,如想要原汁原味,建议看原版(最好的阅读方式)。我会陆续把所有50个条款翻译出来,谢谢大家支持。
[译者按] Scott Meyers, C++软件开发的最权威人士,已出版的作品有《Effective C++》、《Move Effective C++》和《Effective C++ CD》。他曾是《C++ Report》的专栏作家,是《C/C++ Users Journal》和《Dr. Dobb’s Journal》的撰稿人,还是一个客户遍及世界各地的顾问。他是NumeriX LLC 和InfoCruiser Inc.的顾问委员会成员之一,拥有布朗大学计算机科学的博士学位。《Effective STL》—— 改善标准模板库使用的50种特殊方法是其最新的作品。
毫无疑问,STL有迭代器(iterators)、算法(algorithms),还有函数对象(function objects),但对大多数C++程序员来说,STL就是容器(containers)。它们比数组更强大更灵活,可以动态的增长和收缩(尺寸),能自己管理内存,知道自己容纳了多少对象,隔离其所支持操作的算法复杂性(the algorithm complexity of the operations),还有更多更多。它们如此流行是很容易理解的。它们就是比它们的竞争者好,不管其竞争者是来自其他库中的容器还是你自己写的容器类型。STL容器不是刚刚好(just good),而是确实是好(really good)——有点强词夺理(J)。
本章的内容主要是一些应用于所有STL容器的指导方针(guidelines)。后面的章节则会关心特定的容器类型。这里关注的主题包括面对给定的约束条件(constraints)选择合适的容器;避免造成这样一种错觉,就是为一种容器类型所写的代码可能也适用于其它容器类型;复制操作的重要性;当把指针或auto_ptrs保存在容器内时难度的提高;插入与擦除;使用自定义的分配器(allocators)你能够完成什么和不能够完成什么;得到最佳效率的技巧;以及在多线程环境下使用容器的注意事项。
恩,有好多东东,但是请不要担心。所有这些都被分成一小块一小块的条目,循条而行,你肯定可以捡到(pick up)几条原则应用到你所写的代码中去。
条款1: 小心地选择你的容器 (Choose your containers with care.)
你知道在C++中,你可以自由自在的处置多种容器,但是你知道这些容器到底是如何多种多样的呢?为了确保你没有忽视任何可能的选择,这里是一个简短的回顾。