《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
};


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 在老挝遇到坏人带枪怎么办 买了sd卡卡槽塞不下怎么办 现役军人家庭被邻居欺服怎么办 地铁买票买多了怎么办 免税店买的东西转机怎么办 绿能电动车坏了怎么办? 永久单车收不到验证码怎么办 24速山地车档乱了怎么办 新电瓶车被偷了怎么办 汽车前风挡玻璃砸出洞怎么办 凯迪拉克xt5钥匙掉了怎么办 凯迪拉克xt5媒体不好用怎么办 晒黄的白鞋怎么办 白鞋子被晒黄了怎么办? 耐克空军一号白色发黄怎么办 空军一号破皮了怎么办 匡威鞋帆布破了怎么办 脚腕起疙瘩很痒怎么办 跑步后脚踝微疼怎么办 跑步跑得脚疼怎么办 nike air 鞋头脱胶怎么办 耐克空军一号磨脚怎么办 白鞋刷完变黄了怎么办 乔丹气垫坏了怎么办 气垫鞋气垫坏了怎么办 建行u盾忘记密码怎么办 工商银行u盾忘记密码怎么办 民生银行不给u盾怎么办 银行不给开u盾怎么办 有车有空想赚点外快怎么办 车被注册了滴滴怎么办 快手号手机丢了怎么办 手机号码不停收到验证码怎么办 手机网页滑动自动跳到最下面怎么办 网页一打开就跳至评论怎么办? 百度总出现重复的网页怎么办 苹果7一直处于系统升级页面怎么办 手机看百度文章总是跳转怎么办 美度舵手滑丝怎么办 小区房产证办不下来怎么办 美海军陆战队进驻台湾大陆怎么办?