C++ 自定义迭代器

来源:互联网 发布:vb打印字符串 编辑:程序博客网 时间:2024/06/05 18:36

程序员可以根据需要定义自己的迭代器。MyIterator(这个代码还没看懂)

//print.h#include<iostream>#include<string>template <typename T>inline void PRINT_ELEMENTS(const T& coll, const std::string& optstr=""){std::cout<<optstr;std::cout<<std::endl;}

//assoiter.h#include<iterator>template <typename Container>class asso_insert_iterator : public std::iterator<std::output_iterator_tag, typename Container::value_type> {protected:Container& container;public:explicit asso_insert_iterator(Container& c):container(c){}asso_insert_iterator<Container>& operator=(const typename Container::value_type& value){container.insert(value);return *this;}asso_insert_iterator<Container>& operator*(){return *this;}asso_insert_iterator<Container>& operator++(int){return *this;}};template <typename Container>inline asso_insert_iterator<Container> asso_inserter(Container& c){return asso_insert_iterator<Container>(c);}

//test.cpp#pragma warning(disable:4786)#include<iostream>#include<set>#include<vector>#include<algorithm>#include "print.h"#include "assoiter.h"int main(){std::set<int> coll;asso_insert_iterator<std::set<int> > iter(coll);*iter = 1;iter++;*iter = 2;iter++;*iter = 3;std::copy(coll.begin(), coll.end(), std::ostream_iterator<int>(std::cout, " "));std::cout<<std::endl;asso_inserter(coll) = 44;asso_inserter(coll) = 55;std::copy(coll.begin(), coll.end(), std::ostream_iterator<int>(std::cout, " "));std::cout<<std::endl;std::vector<int> vals;vals.push_back(33);vals.push_back(67);vals.push_back(-4);vals.push_back(13);vals.push_back(5);vals.push_back(2);std::copy(vals.begin(), vals.end(), std::ostream_iterator<int>(std::cout, " "));std::cout<<std::endl;return 0;}

0 0
原创粉丝点击