C++的迭代器适配器中常用的有插入迭代器(Inser Iterator)、流迭代器(Stream Iterator)和逆向迭代器(Reverse Iterator)等!
本文主要是介绍插入迭代器(Inser Iterator).下面介绍三种插入迭代器:
1.Back Inserter
原理:其内部调用push_back()
功能:在容器的尾端插入元素
限制:只有提供了push_back()成员函数的容器中,back inserter才能派上用场
适用:vector deque list
2.Front Inserter
原理:其内部调用push_front()
功能:在容器的前端插入元素
限制:只有提供了push_front()成员函数的容器中,front inserter才能派上用场
适用:deque list
3.Inserter
原理:其内部调用insert()
功能:在容器的指定位置插入元素
限制:只有提供了inset()成员函数的容器中,inserter才能派上用场. 所有STL容器都提供了inset()函数.
适用:所有STL容器
使用举例:
typedef std::list<int> IntList;
IntList intList;
IntList::const_iterator listIt;
for(int i=1;i<=9;++i)
intList.push_back(i);
std::cout<<"list data:
";
for(listIt=intList.begin(); listIt!=intList.end(); ++listIt)
std::cout<<*listIt<<' ';
typedef std::vector<int> IntVector;
IntVector intVector;
IntVector::const_iterator vectorIt;
copy(intList.begin(),intList.end(),back_inserter(intVector)); ///back inserter
std::cout<<"
vector data:
";
for(vectorIt=intVector.begin(); vectorIt!=intVector.end(); ++vectorIt)
std::cout<<*vectorIt<<' ';
//vectorIt=intVector.begin();++vectorIt;
copy(intList.begin(),intList.end(),inserter(intVector,intVector.begin()+5)); //inserter
std::cout<<"
vector data after insert:
";
for(vectorIt=intVector.begin(); vectorIt!=intVector.end(); ++vectorIt)
std::cout<<*vectorIt<<' ';
typedef std::deque<int> IntDeque;
IntDeque intDeque;
IntDeque::const_iterator dequeIt;
//copy(intList.begin(),intList.end(),front_inserter(intDeque)); ///front inserter
copy(intList.begin(),intList.end(),inserter(intDeque,intDeque.begin()));
std::cout<<"
deque data:
";
for(dequeIt=intDeque.begin(); dequeIt!=intDeque.end(); ++dequeIt)
std::cout<<*dequeIt<<' ';
typedef std::set<int> IntSet;
IntSet intSet;
IntSet::const_iterator setIt;
copy(intList.begin(),intList.end(),inserter(intSet,intSet.begin())); ///inserter
std::cout<<"
set data:
";
for(setIt=intSet.begin(); setIt!=intSet.end(); ++setIt)
std::cout<<*setIt<<' ';
注意:
使用inserter的时候,插入的起始位置是在指定位置的前方!
1 #include <vector> 2 #include <iostream> 3 #include <cstdio> 4 #include <functional> 5 #include <algorithm> 6 #include <iterator> 7 #include<list> 8 #include <istream> 9 using namespace std; 10 11 int main() 12 { 13 int ia[]={1,2,3,4,100,5,100}; 14 vector<int>ivec(ia,ia+7); 15 list<int>ilst; 16 17 replace_copy(ivec.begin(),ivec.end(),inserter(ilst,ilst.begin()),100,0); 18 19 //replace_copy(ivec.begin(),ivec.end(),back_inserter(ilst),100,0); 20 21 //replace_copy(ivec.begin(),ivec.end(),) 22 cout<<"list:"<<endl; 23 for(list<int>::iterator iter=ilst.begin();iter!=ilst.end();++iter) 24 cout<<*iter<<" "; 25 return 0; 26 }