• 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 }
  • 相关阅读:
    360浏览器通过.favdb文件恢复前一个登录账号的收藏夹到新账号
    react跨域问题Django配置允许跨域No 'Access-Control-Allow-Origin' header is present on the requested resource',及其解决办法
    Scratch3.0后台开发记录(一)创建Django 后台服务器
    Scratch3.0开发记录(三)添加登录功能之使用fetch配置登录端口
    谈谈绩效考核
    前端面试中该问些什么?
    用cocos2d-html5做的消除类游戏《英雄爱消除》(3)——游戏主界面
    用cocos2d-html5做的消除类游戏《英雄爱消除》(2)——Block设计实现
    用cocos2d-html5做的消除类游戏《英雄爱消除》(1)——系统主菜单
    用cocos2d-html5做的消除类游戏《英雄爱消除》(4)——游戏结束
  • 原文地址:https://www.cnblogs.com/Zblogs/p/3268703.html
Copyright © 2020-2023  润新知