链表
template<typename Elem>
struct Link
{
Link* prev; //前趋连接
Link* succ; //后继(下一个)连接
Elem val; //值
}
template<typename Elem>
class list
{
};
我们能够将每一容器的迭代器都命名为literator。
在标准库中存在着list<T>::iterator、vector<T>::iterator、map<K,V>::iterator
再次泛化vector
using声明为一个类型创建别名,即对于我们的vector,iterator是我们用作迭代器类型T*的一个同义词,它
的另一个名字。
auto
template<typename T> //要求Element<T>()
void user(vector<T>& v, list<T>& lst)
{
for (vector<T>::iterator p = v.begin(); p!=v.end(); ++p) cout<<*p<<'\n';
list<T>::iterator q = find(lst.begin(), lst.end(), T{42});
}
可以将变量声明为auto的,表示使用iterator类型作为变量的类型。
template<typename T> //要求Element<T>()
void user(vector<T>& v, list<T>& lst)
{
for (auto p = v.begin(); p!=v.end(); ++p) cout<<*p<<'\n';
auto q = find(lst.begin(), lst.end(), T{42});
}
这里,P是一个vector<T>::iterator, q是一个list<T>::iterator。