# 泛型编程 我们先来看两个代码片段,第一个片段使用数组来寻找相同的值,第二个片段使用链表的数据结构来寻找相同的值。 ```C++ double * find_ar(double * ar, int n, const double & val) { for (int i=0;i InputIterator find(InputIterator first, InputIterator last, const T& value); //函数原型指出了这种算法需要一个输入迭代器 template void sort(RandomAccessIterator first, RandomAccessIterator last); //排序算法需要一个随机访问迭代器 ``` 这5种迭代器都可以执行解除引用的操作,即为它们定义*运算符,也可以进行比较。 ## 迭代器功能 | 迭代器功能 | 输入 | 输出 | 正向 | 双向 | 随机访问 | | ---------------- | ---- | ---- | ---- | ---- | -------- | | 接触引用读取 | 有 | 无 | 有 | 有 | 有 | | 解除引用写入 | 无 | 有 | 有 | 有 | 有 | | 固定和可重复排序 | 无 | 无 | 有 | 有 | 有 | | ++i,i++ | 有 | 有 | 有 | 有 | 有 | | --i,i-- | 无 | 无 | 无 | 有 | 有 | | i[n] | 无 | 无 | 无 | 无 | 有 | | i+n | 无 | 无 | 无 | 无 | 有 | | i-n | 无 | 无 | 无 | 无 | 有 | | i+=n | 无 | 无 | 无 | 无 | 有 | | i-=n | 无 | 无 | 无 | 无 | 有 | ## 容器种类 STL中提供了多种容器的种类。 通用容器:deque、list、queue、priority_queue、stack、vector、map、multimap、set、multiset、bitset,C++11新增容器:forward_list、unordered_map、unordered_multimap、unordered_set、unordered_multiset。 基本容器不能保证其元素都按特定的顺序存储,也不能保证元素的顺序不变,对概念进行改进后可以增加这样的保证。