STL中迭代器浅析(转自:http://blog.csdn.net/gou_zh/archive/2008/11/04/3209974.aspx)

来源:互联网 发布:xin域名注册 编辑:程序博客网 时间:2024/05/14 06:54

STL中迭代器浅析
 
C++中的迭代器主要有三种,迭代器的作用就是让你用*iter就可以访问容器中的值,用iter++就可以向后遍历,而不必去管容器的内部结构。
 
1.insert iterator(安插型迭代器,三种)
back_insert_iterator, front_insert_iterator, insert_iterator //使用前必须初始化
back_inserter(), front_inserter(), inserter() //与上面迭代器相关的函数
 
使用方法如下:
vectorcoll;
back_insert_iterator< vector >iter(coll);
front_insert_iterator< vector >iter2(coll);
back_inserter(coll) = 20; //在coll后面插入值20
front_inserter(coll) = 50; //在coll前面插入值50
copy(coll.begin(), coll.end(), back_insert(coll));
 
setcoll2;
insert_iterator< set >iter(coll2, coll2.begin());
inserter(coll2, coll2.end()) = 50;
copy(coll2.begin(), coll.end(), inserter(coll2, coll2.begin());

从上面的例子可以看出,类似back_insert_iterator的可以直接用对象初始化,用*iter取元素,iter++递增;同时,back_inserter是种简单方法,它可以在被赋值后自动递增迭代器;front_insert_iterator与之不同处在于它每安插一个元素都是在已有的元素前面;而insert_iterator初始化时不仅要指出要插入的对象,还需要被告知即将插入的位置。
 
2.reverse iterator(逆向迭代器,一般用于可以双向移动的容器)
deque::iterator pos = coll.begin();
deque::reverse_iterator rpos(pos);  //反转
deque::iterator rrpos = rpos.base(); //再次反转
 
由上可知,逆向迭代器的初始化方式需要指定域,他不是所有容器都能使用。
 
3.stream iterator(流迭代器)
istream_iterator, ostream_iterator;

使用方法如下:
copy(coll.begin(), coll.end(), ostream_iterator(cout));  //拷贝到标准输出
copy(coll.begin(), coll.end(), ostream_iterator(cout," ")); //以空格隔开
 
istream_iterator cinpos(cin);
ostream_iterator coutpos(cout);
while( cinpos != istream_iterator() )*coutpos++ = *cinpos++; //将标准输入拷贝到标准输出
注意istream迭代器中出现的istream_iterator(),他表示流结束,产生一个end-of-stream信息。
 
4.与迭代器相关的函数
void advance(InputIterator &pos, dist n); //使迭代器pos移动n个元素,移动方向取决于n的正负
dist distanse(InputIterator pos1, InputIterator pos2); //返回两个迭代器的间距,两个迭代器必须在同一容器,而且有先后次序
void iter_swap(ForwardIterator1 pos1, ForwardIterator2 pos2); //交换两个迭代器的元素值


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gou_zh/archive/2008/11/04/3209974.aspx

原创粉丝点击