- 数组泛化为容器,参数化了所包含的对象的类型
- 函数泛化为算法,参数化了所用的迭代器的类型
- 指针泛化为迭代器,参数化了所指向的对象的类型
二、类似的容器拥有类似的功能
- 连续内存容器都提供随机访问迭代器
- 基于节点的容器都提供双向迭代器
- 序列容器支持
push_front
或push_back
,但关联容器不支持 - 关联容器提供对数时间复杂度的
lower_bound
、upper_bound
和equal_range
成员函数,但序列容器却没有
三、使用封装——typdedf
不要这样写代码
class Widget {...}; vector<Widget> vw; Widget bestWidget; ... // 给bestWidget一个值 vector<Widget>::iterator i = bestWidget相等的Widget find(vw.begin(), vw.end(), bestWidget);
使用typedef定义容器类型,使得改变更容易
class Widget { ... }; typedef vector<Widget> WidgetContainer; typedef WidgetContainer::iterator WCIterator; WidgetContainer cw; Widget bestWidget; ... WCIterator i = find(cw.begin(), cw.end(), bestWidget);
三、在类中隐藏容器类型
不要直接使用容器,建立一个类,把对标准容器的使用放在private区域
class CustomerList { private: typedef list<Customer> CustomerContainer; typedef CustomerContainer::iterator CCIterator; CustomerContainer customers; public: // 通过这个接口 ... // 限制list特殊信息的可见性 };