C++inserter

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 }
原文地址:https://www.cnblogs.com/Zblogs/p/3268703.html