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 }
  • 相关阅读:
    前后端分离项目本地测试跨域问题配置
    STS没有找到Dynamic Web Project
    java常见面试题
    log4jdbc 使用
    Thymeleaf 入门
    集成maven和Spring boot的profile 专题
    ftp命令大全
    windows下安装redis
    linux安装环境
    atmega328 熔丝
  • 原文地址:https://www.cnblogs.com/Zblogs/p/3268703.html
Copyright © 2011-2022 走看看