通常我们在写程序时,对于使用序列容器有三种:vector,deque,list。如果我们想在代码中写出的程序能够被这三种容器一起使用那么我们就必须要使用这三个类集合的交集。如:
(一)由于list存在我们就得要放弃operator[],同样我们得放弃那些要求随机访问迭代器的操作,包括sort,stable_sotr,partial_sort和nth_element.
(二) 为了支持vector我们就不能使用push_front,pop_front;对于vector和deque而言,splice和成员函数形式的sort又是被禁用的。结合以上两点,最后的这一限制意味着你的“泛化的序列容器”将没有任何形式的sort可用.
(三) reserve和capacity也都不能用了.
考虑到有时候我们不可避免地要从一种容器类型转到另一种,你可以使用常规的方式来实现这种转变:使用封装技术.最简单的方式 是通过对容器类型和其迭代器类型使用类型定义(typedef).因此,不要这样写:
class Widget { ... };
vector<Widget> vw;
Widget bestWidget;
... // give bestWidget a value
vector<Widget>::iterator i = // find a Widget with the
find(vw.begin(), vw.end(), bestWidget); // same value as bestWidget
应该这样写class Widget { ... };
typedef vector<Widget> WidgetContainer;
typedef WidgetContainer::iterator WCIterator;
WidgetContainer vw;
Widget bestWidget;
...
WCIterator i = find(vw.begin(), vw.end(), bestWidget);