程序员可以根据需要定义自己的迭代器。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;
}