• 反转迭代器和插入迭代器的区别


    反转迭代器顾名思义,反向操作容器,而插入迭代器是将迭代器的赋值操作转换为push_back(),push_front(),insert()操作。插入迭代器要求容器必须包含对应的push_back(),push_front(),insert()操作,这样才能对容器进行插入。

    插入迭代器分三种

      back_insert_iterator(C) 在容器末端插入数据

      front_insert_iterator(C) 在容器前端插入数据

      insert_iterator(C) 在容器指定位置插入数据

    对应三个函数模板

      back_inserter(c):这种迭代器调用容器的push_back操作替代赋值运算符。该迭代器的参数是容器本身。

      front_inserter(c):该迭代器使用push_front操作替代赋值运算符。参数是容器本身。

      Inserter(c,i):该迭代器使用容器的insert操作替代赋值运算符。该迭代器有两个参数:第一个参数是容器本身,第二个参数是容器的一个迭代器,用以指定插入位置。

    反转迭代器

    改变迭代器行为或者将流包装成迭代器. reverse_iterator<>

    将容器内数据反向输出。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <iterator>
     4 
     5 
     6 int main()
     7 {
     8     char array[] = "abcde";
     9     using namespace std;
    10     typedef reverse_iterator<char*> backward_iterator;//
    11     backward_iterator b(array+strlen(array));//指向最后一个元素位置 
    12     backward_iterator end(array);//指向首元素位置
    13     for (; b !=end;++b)//从最后一个开始逆向循环
    14     {
    15         cout<<*b;//
    16     }
    17 
    18     getchar();
    19 }

    插入迭代器

    将数据插入指定位置

     1 #include <iostream>
     2 #include <list>
     3 #include <iterator>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     int array[] = {0,1,2,3,4,5,6,7,8,9};
     9     list<int>il;
    10     list<int>::iterator it1;
    11     copy(array+5,array+10,back_inserter(il));//插入il末尾 5 6 7 8 9
    12     it1 = il.begin();
    13     for(;it1!= il.end();++it1)//输出为56789
    14     {
    15         cout<<*it1;
    16     }
    17     cout<<endl;
    18 
    19     typedef reverse_iterator<int*>array_reverse_iterator;//反转迭代器
    20     copy(array_reverse_iterator(array+5),array_reverse_iterator(array),front_inserter(il));//插入顺序4,3,2,1,0
    21 
    22     list<int>::iterator it2 = il.begin();
    23     for(;it2!= il.end();++it2)//输出为0123456789
    24     {
    25         cout<<*it2;
    26     }
    27     cout<<"inserter"<<endl;
    28     int a[] = {0,1};
    29     copy(a,a+2,inserter(il,it2));//指定位置插入数据
    30 
    31     it2 = il.begin();
    32     for(;it2!= il.end();++it2)//输出为012345678901
    33     {
    34         cout<<*it2;
    35     }
    36     getchar();
    37 }

    总结:

      反转迭代器-使迭代器行为和原来相反,++变--,+n变 –n,等。

      插入迭代器- 在指定位置插入数据,容器头部或者尾部,或者任意位置,但必须保证容器含有对应的功能。

  • 相关阅读:
    odoo字段
    页签中加按钮 odoo里面
    页签类型按钮上面记录条数获得
    sql语句 这里是取一串数据中的 头 中 尾 几个数据
    python 字典,元组,对象,数组取值方法
    action类型的按钮和object按钮的用法
    数据结构与算法 基于c语言篇
    odoo开发历史订单需求整体思路
    spring框架的ioc和aop
    java注解和反射学习
  • 原文地址:https://www.cnblogs.com/songliquan/p/4106509.html
Copyright © 2020-2023  润新知