《Effective STL》读书笔记一:Item 1(小心选择容器) Item 2(当心容器无关代码的假象)
来源:互联网 发布:iapp免杀软件 编辑:程序博客网 时间:2024/06/05 17:36
Item 1:Choose your containers with care
小心选择容器
a) 主要容器包括:
1. 标准STL顺序容器:vector, list, deque, string
2. 标准STL关联容器:set, multiset, map, multimap
3. 其他:slist, rope, hash_set, hash_map, array, stack等。
b) 简单的顺序容器选择规则:默认使用vector,当需要频繁在中间插入和删除元素时使用list,当插入和删除主要在容器两端执行时使用deque。
c) 容器可分为两类:内存连续型(Contiguous-memory containers)和基于节点型(Node-based containers)。
Item 2:Beware the illusion of container-independent code.
当心容器无关代码的假象
a) 容器无关代码是不现实的。
b) 通过封装,可以使改变容器时对相关代码的修改变得方便。最简单的方式是用typedef定义容器和迭代器类型。
下面的代码:
class Widget {...};
vector<Widget> vw;
Widget bestWidget;
vector<Widget>::iterator i = find(vw.begin(), vw.end(), bestWidget);
为了方便在容器改变时修改相关代码,可以考虑封装成这样的方式:
class Widget {...);
typedef vector<Widget> WidgetContainer;
typedef WidgetContainer::iterator WCIterator;
WidgetContainer vw;
Widget bestWidget;
WCIterator i = find(vw.begin(), vw.end(), bestWidget);
c) typedef只能提供词法上的帮助。当需要更进一步的封装时,应该使用类。
为了减少变化容器时的代码修改,将容器封装在类中,将容器相关的信息暴露在类的接口中。
例如:
class CustomerList {
private:
typedef list<Customer> CustomerContainer;
typedef CustomerContainer::iterator CCIterator;
CustomerContainer customers;
public:
...
// limit the amount of list-specific information visible through this interface
};
- 《Effective STL》读书笔记一:Item 1(小心选择容器) Item 2(当心容器无关代码的假象)
- Effective STL:Item2 当心与容器无关(container-independent)的代码这个错觉
- Effective STL之条款2:谨防容器无关代码的假象
- Effective STL 条款2:小心对“容器无关代码”的幻想(连载)
- Item 2:抛弃写“容器无关”的代码的幻想
- 《Effective STL》读书笔记六:Item 12:对 STL容器的线程安全性抱有现实的期望
- 《Effective STL》读书笔记二:Item 3(让容器中对象高效和正确地复制) Item 4(使用empty()而不是检查size())
- STL高效编程(二)- 注意容器的不同特点,小心容器无关的代码
- Effecective STL: 容器 (条款1: 小心选择你的容器)
- 条款 2: 小心对“容器无关代码”的幻想
- 条款2:小心对“容器无关代码”的幻想
- 条款2:小心对“容器无关代码”的幻想
- effective stl读书笔记 —— Item 2
- effective stl读书笔记 —— Item 1
- Effective STL 第一章:容器(一)
- 迭代器失效(1)-小心使用STL容器的erase()
- 迭代器失效(1)-小心使用STL容器的erase()
- Effective STL: 选择合适的容器
- java一次性查询几十万,几百万数据解决办法
- 黑马程序员——java常用类、框架
- java设计模式之建造者模式
- .Net面试知识
- 获取手机信息<uses-permission android:name="android.permission.READ_PHONE_STATE" />
- 《Effective STL》读书笔记一:Item 1(小心选择容器) Item 2(当心容器无关代码的假象)
- cocos2d-x锚点在Sprite与Layer上移动定位不一样的问题。
- Canvas绘图(各种图片的绘制)
- 黑马程序员——java IO
- 使用exe4j 制作java启动程序的 等候界面
- php格式化数字:位数不足前面加0补足
- 通过CCID获得各个段的描述的方法
- linux与用户相关内容及命令
- IE中body的事件范围