zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    oracle 数据库服务名怎么查
    vmware vsphere 6.5
    vSphere虚拟化之ESXi的安装及部署
    ArcMap中无法添加ArcGIS Online底图的诊断方法
    ArcGIS中字段计算器(高级计算VBScript、Python)
    Bad habits : Putting NOLOCK everywhere
    Understanding the Impact of NOLOCK and WITH NOLOCK Table Hints in SQL Server
    with(nolock) or (nolock)
    What is “with (nolock)” in SQL Server?
    Changing SQL Server Collation After Installation
  • 原文地址:https://www.cnblogs.com/Zblogs/p/3268703.html
Copyright © 2011-2022 走看看