使用者自定义User-Defined的迭代器

来源:互联网 发布:javascript 雪峰 编辑:程序博客网 时间:2024/05/03 21:36

以下实例说明如何编写自定义的迭代器。这事一个关联式容器的Insert迭代器,虾米那是其实作代码

#include<iterator>using namespace std;//template class for insert iterator for associative containerstemplate <class Container>class asso_insert_iterator:public iterator<output_iterator_tag, void, void ,void, void>{protected:Container& container;  //contianer in which elements are insertedpublic://constructorexplicit asso_insert_iterator (Container&c) : container(c){}//assignment operator//inserts a value into the containerasso_insert_iterator<Container>& operator= (const typename Container::value_type& value){container.insert(value);return *this;}//dereferencing is a no-op that returns the iterator itselfasso_insert_iterator<Container>& operator*(){return *this;}//increment operation is a no-op that returns the iterator itselfasso_insert_iterator<Container>& operator++(){return *this;}asso_insert_iterator<Container>& operator++(int){return *this;}};//convenience function to create the insertertemplate <class Container>inline asso_insert_iterator<Container> asso_inserter(Container& c){return asso_insert_iterator<Container>(c);}


这一Insert迭代器定义完成后,还可以提供一个函数asso_inserter(),用来简化迭代器的生成动作和初始化动作。以下程序便是使用这样一个Insert对着一个set安插一些元素:

#include<iostream>#include<iterator>#include<set>#include<algorithm>#include"assoiter.h"#include"print.h"using namespace std;int main(){set<int> coll;//create inserter for coll//inconvenient wayasso_insert_iterator<set<int> > iter(coll);//insert elements with the usual iterator interface*iter = 1;iter++;*iter = 2;iter++;*iter = 3;PRINT_ELEMENTS(coll);//create inserter for coll and insert elements//convenient wayasso_inserter(coll) = 44;asso_inserter(coll) = 55;PRINT_ELEMENTS(coll); //use inserter with an algorithmint vals[] ={33, 67, -4, 13, 5, 2};copy(vals, vals+(sizeof(vals)/sizeof(vals[0])), asso_inserter(coll));PRINT_ELEMENTS(coll);return 0;}


原创粉丝点击