
effective stl
beecindy
hi
展开
-
条款2:小心对“容器无关代码”的幻想
STL是建立在泛化之上的。数组泛化为容器,参数化了所包含的对象的类型。函数泛化为算法,参数化了所用的迭代器的类型。指针泛化为迭代器,参数化了所指向的对象的类型。 typedef的意义:class Widget {...};vector vw;Widget bestWidget; // 给bestWidget一个值...原创 2010-02-05 13:48:00 · 279 阅读 · 0 评论 -
条款1:仔细选择你的容器
vector, deque和list中进行选择的指导:vector, list 和 deque 为程序员提供不同的复杂度平衡,应权衡使用。vector 是序列式容器,作为缺省使用。List应当用于频繁在序列中部进行插入和删除操作的情况。当大多数插入和删除操作发生在序列的头和尾时请选择deque。 连续内存容器(contiguous-memory containers)(也叫原创 2010-02-05 11:35:00 · 307 阅读 · 0 评论 -
条款4:用empty来代替检查size()是否为0
应该首选empty()的构造,而且理由很简单:对于所有的标准容器,empty()是一个常数时间的操作,但对于一些list实现,size()花费线性时间。主要原因是对于list特有的splice()函数。 list提供了不用拷贝数据就能把元素从一个地方合并到另一个地方的能力。它提供了高效的合并。他们知道从一个list合并一个区域到另一个list可以在常数时间内完成。原创 2010-02-10 14:10:00 · 380 阅读 · 0 评论 -
条款3:使容器里对象的拷贝操作轻量而正确
当你向容器中添加一个对象(比如通过insert或push_back等),进入容器的是你指定的对象的拷贝。当你从容器中获取一个对象时(比如通过front或back),你取到的是容器中那个对象的拷贝。拷进去,拷出来。这就是STL的方式。如果你从vector、string或deque中插入或删除,任何排序算法或它们的同类对象会移动(拷贝)。 因此,如果你用一个拷贝过程很昂贵对原创 2010-02-10 11:28:00 · 303 阅读 · 0 评论