一、迭代器适配器
反向迭代器
插入迭代器
IO流迭代器
其中反向迭代器可以参考以前的文章。
二、插入迭代器
插入迭代器实际上是一个输出迭代器(*it=; ++)
back_insert_iterator
back_inserter
front_insert_iterator
front_inserter
先来看示例:
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#include <iostream>
#include <vector> #include <algorithm> using namespace std; void ShowVec( const vector< int> &v) { for (vector< int>::const_iterator it = v.begin(); it != v.end(); ++it) { cout << *it << ' '; } cout << endl; } int main( void) { int a[] = { 1, 2, 3, 4, 5}; vector< int> v(a, a + 5); vector< int> v2; back_insert_iterator<vector< int> > bii(v); //*bii = 6; bii = 6; ShowVec(v); back_insert_iterator<vector< int> > bii2(v2); copy(v.begin(), v.end(), bii2); ShowVec(v2); back_inserter(v) = 7; ShowVec(v); copy(v.begin(), v.end(), back_inserter(v2)); ShowVec(v2); return 0; } |
查看back_insert_iterator 类的定义:
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
// TEMPLATE CLASS back_insert_iterator template< class _Container> class back_insert_iterator : public _Outit { // wrap pushes to back of container as output iterator public: typedef _Container container_type; typedef typename _Container::reference reference; typedef _Range_checked_iterator_tag _Checked_iterator_category; explicit back_insert_iterator(_Container &_Cont) : container(&_Cont) { // construct with container } back_insert_iterator<_Container> & operator=( typename _Container::const_reference _Val) { // push value into container container->push_back(_Val); return (* this); } back_insert_iterator<_Container> & operator*() { // pretend to return designated value return (* this); } back_insert_iterator<_Container> & operator++() { // prete |