Effective STL前言

原创 2004年12月31日 01:41:00
It came without ribbons!
It came without tags! It came without packages, boxes or bags!
——Dr. Seuss, How the Grinch Stole Christmas!, Random House, 1957

我第一次写关于Standard Template Library的东西是在1995年,那时,我决定把More Effective C++的最后一个条款写成一个STL的简要概览。我早该更好地了解STL。不久以后,我开始收到一些mail,问我什么时候写Effective STL。

我把这个想法忍耐了几年。一开始,我对STL不够熟悉,所以不能给出关于它的建议。但随着时间的推移,我的STL的经验丰富了,主要问题出在其他方面。当一个程序库的在效率和可扩展性设计上表现出突破性的时候从来没有出过什么问题,但当开始使用STL时,这成了我不能预见的实际问题。迁移到一个几乎最简单的STL程序都成了一个挑战,不光是因为库的实现变化多端,而且因为现有的编译器对模板支持有好有坏。STL的教材很难得到,所以学习“用STL方式编程”很难;但即使跨越了这个障碍,找到正确易学的参考文档同样很困难。可能使人畏惧的是,即使最小的STL使用错误往往会导致一个编译器诊断的风暴——每一个错误都有上千个字长,而且大多涉及的类,函数或模板在令人厌恶的源代码中并没有被提及——几乎都是难以理解的。虽然我很钦佩STL和它背后的英雄们,但我还是觉得把STL推荐给在业的程序员并不合适。我不能肯定能有效率地使用STL。

然后我开始注意到一些让我感到惊奇的事情。尽管有很多小问题,尽管只有令人消沉的文档,尽管编译器的出错信息像无线电信号杂音,但仍然有很多我的咨询客户在使用STL。而且,他们不只是玩玩而已,他们竟然把STL用到了产品的代码中!这是一个革命。我知道STL表现出的是一流的设计,但程序员是不会喜欢用“必须忍耐轻微头痛,只有贫乏的文档和天书般的错误信息,但设计得很好”的程序库的。我了解到越来越多的专业程序员都认为即使一个实现得很不好的STL也比什么都没有好得多。

此外,我知道关于STL的境遇只会越来越好。程序库和编译器对(它们的)标准的兼容性会越来越好,更好的文档将会出现(它已经存在了——请见从297页开始的“参考书目”),而且编译器的诊断会渐渐改进(在极大程度上,我们仍然在等待,但条款49提供了怎样在其间应付的建议)。因此我决定插嘴,尽一份力量来支持STL运动的萌芽。这本书就是结果:改善使用C++ STL的50个有效做法。

一开始,我计划在1999年下半年写这本书。带着这个想法,我组织了一个大纲。但我暂停和改变了进程。我停止了写书的工作,开发了一个介绍性的STL训练课程,把它教给几拨不同的程序员。大约一年后,我回到写书的工作中,根据我在训练课程中得到的经验意味深长地修改了大纲。和我的Effective C++成功的方法一样,它们都是以真正的程序员所面对的问题为基础的。我希望Effective STL同样从事于STL编程的实践方面——这是对专业开发人员最重要的方面。

我一直在寻找着能让我加深对C++理解的方法。如果你对STL编程有新的建议或者如果你对这本书有什么评论的话,请让我知道。另外,让这本书尽可能的正确是我的继续的目标,所以如果谁挑出了

相关文章推荐

标准模板库--STL 进行C++编程--前言(初读感悟)

放暑假前,听我们技术支持课的陈亮老师说标准模板库有很多优点,也是C++的重要组成部分,所以我特地从网上查了一下,是这么说的:      根据Effective C++第三版第一条款的描述,现在C++...

Effective STL——容器中所发生的对象拷贝问题

当你从容器中获取一个对象,或者添加一个对象时,你所加入的那个对象和所获取的那个对象都不是你原本期望的那个对象,而是他们的拷贝。 对于容器来说,拷贝是时刻发生的,比如你在vector,string,或...

《Effective STL》学习笔记(第一部分)

本书从STL应用出发,介绍了在项目中应该怎样正确高效的使用STL。本书共有7个小节50个条款,分别为 (1) 容器:占12个条款,主要介绍了所有容器的共同指导法则 (2) vect...

effective stl(容器部分总结)

还是很喜欢effective部分的书,看了好几遍,这里把stl中和容器相关的一些基本的注意的点进行介绍总结,之后对迭代器等进行总结 1 对序列容器中需要逐个删除的时候,不能像关联容器那样事先对迭...

Effective STL(2)

避免使用vector 12.永不建立auto_ptr的容器,当你向set中插入一个新元素时,set::insert必须可以判断那个元素的值是否已经在set中了。 优先选择成员函数(就像set::f...

Effective STL-各种容器正确删除元素方法

一、去除一个容器中有特定值得所有对象1、如果容器是vector、string或deque,使用erase-remove惯用法c.erase(remove(c.begin,c.end(),value),...

Effective STL -- 容器

01.慎重选择容器类型 选择容器原则:需要考虑元素的排序情况,是否与标准相符,迭代器能力,元素布局,与C的兼容性,查找速度,引用计数,插入删除对事物语义的支持,某些操作是否会使迭代器无效,内存分配...

Effective STL 建议

Vector是一种可以默认使用的序列类型,当很频繁地对序列中部进行插入和删除时应该用lit,当大部分插入和删除发生在序列的头或尾时可以选择deque这种数据结构。          STL是建立在泛...

Effective STL 第5条:区间成员函数优先于与之对应的单元素成员函数

使用区间成员函数而不是其相应的单元素成员函数的原因: l  通过使用区间成员函数,通常可以少写一些代码。 l  使用区间成员函数通常会得到意图清晰和更加直接的代码。 l  在一般情况下,效...

Effective STL学习笔记

#include "stdafx.h" #include #include #include using namespace std; //条款7:当使用new得指针的容器时,记得在销...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Effective STL前言
举报原因:
原因补充:

(最多只允许输入30个字)