条款2 小心对容器无关代码的幻想

  1. 数组泛化为容器,参数化了所包含的对象的类型
  2. 函数泛化为算法,参数化了所用的迭代器的类型
  3. 指针泛化为迭代器,参数化了所指向的对象的类型

二、类似的容器拥有类似的功能

  1. 连续内存容器都提供随机访问迭代器
  2. 基于节点的容器都提供双向迭代器
  3. 序列容器支持push_frontpush_back,但关联容器不支持
  4. 关联容器提供对数时间复杂度的 lower_boundupper_boundequal_range 成员函数,但序列容器却没有

三、使用封装——typdedf

  1. 不要这样写代码

    class Widget {...};
    vector<Widget> vw;
    Widget bestWidget;
    ... // 给bestWidget一个值
    vector<Widget>::iterator i = bestWidget相等的Widget
    find(vw.begin(), vw.end(), bestWidget);
    
  2. 使用typedef定义容器类型,使得改变更容易

    class Widget { ... };
    typedef vector<Widget> WidgetContainer;
    typedef WidgetContainer::iterator WCIterator;
    WidgetContainer cw;
    Widget bestWidget;
    ...
    WCIterator i = find(cw.begin(), cw.end(), bestWidget);
    

三、在类中隐藏容器类型

  1. 不要直接使用容器,建立一个类,把对标准容器的使用放在private区域

    class CustomerList {
    private:
        typedef list<Customer> CustomerContainer;
        typedef CustomerContainer::iterator CCIterator;
        CustomerContainer customers;
    public: // 通过这个接口
        ... // 限制list特殊信息的可见性
    };
    

原文:大专栏  条款2 小心对容器无关代码的幻想


猜你喜欢

转载自www.cnblogs.com/petewell/p/11607331.html