先说明一些简单的知识:
(1) 每种容器类型都定义了自己的迭代器类型,如vector:
vector<int>::iterator iter;这条语句定义了一个名为iter的变量,它的数据类型是vector<int>::iterator。为什么会有这样奇怪的定义呢?那是因为iterator是vector的一个public内部class,另外::是“域操作符”
(2) 使用迭代器读取vector中的每一个元素:
vector<int> ivec(10,1);
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
{
*iter=2; //使用 * 访问迭代器所指向的元素
}
const_iterator:
只能读取容器中的元素,而不能修改。
for(vector<int>::const_iterator citer=ivec.begin();citer!=ivec.end();citer++)
{
cout<<*citer;
//*citer=3; error
}
vector<int>::const_iterator 和 const vector<int>::iterator的区别
const vector<int>::iterator newiter=ivec.begin();
//*newiter=11; /不/可以修改指向容器的元素
newiter++; //迭代器本身能被修改
(3) iterator的算术操作:
iterator除了进行++,--操作,可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.
const vector<int>::iterator newiter=ivec.begin();
vector<int>::iterator newiter2=ivec.end();
cout<<"\n"<<newiter2-newiter;
内部机制:
list的内部代码类似如下:
template <class Node>
class List{
Node* head;
class iterator{
Node* ptr;
public:
iterator(Node* p=0):ptr(p){}
Node operator*()const{return *ptr;}
iterator& operator++(){ptr=ptr->next; return *this;}
iterator operator++(int)
{iterator tmp=*this ; ++*this; return tmp;}
bool operator==(const iterator&i)const{return ptr==i.ptr;}
bool operator!=(const iterator&i)const{return ptr!=i.ptr;}
};
iterator begin(){return iterator(head);}
iterator end(){return iterator();}
……
};
1、摘自C++ STL 迭代器机制剖析
2、摘自C++ typedef用法小结 (※不能不看※):http://www.cnblogs.com/charley_yang/archive/2010/12/15/1907384.html