• 【C++ Primer 第10章】 10.4.1 插入迭代器


     目录

    •  iostream迭代器

    •  反向迭代器

    插入迭代器

    插入迭代器,这些迭代器被绑定到一个容器上,可以向容器插入元素。  

    头文件为:#include<iterator

     it=t         在it指定的当前位置插入值t。假定c是it绑定的容器,依赖于插入迭代器的不同种类,此赋值分别调用c.push_back(t)、c.push_front(t)或c.insert(t,p),其中p为传递给inserter的迭代器位置
    
    *it,++it,it++    这些操作虽然存在,但不会对it做任何事情。每个操作都返回it

    • back_inserter 创建一个使用push_back的迭代器。

    • front_inserter创建一个使用push_front的迭代器。

    • inserter创建一个使用insert的迭代器。此函数接受第二个参数,这个参数必须是一个指向给定容器的迭代器。元素被插入到指定的迭代器所表示的元素之前。

    【注意】只有容器支持push_back才可以使用back_inserter, 同理,只有容器支持push_front时才可以使用front_inserter

     

    当调用inserter时,得到一个迭代器,接下来使用它时,会将元素插入到这个迭代器所指向的元素之前的位置。即,如果it是由inserter生成的迭代器,则下面这样的赋值语句:
    *it = val;
    效果和下面的代码一样:
    it = c.insert(it, val);
    ++it;                  // 递增it使它指向原来的元素
    list<int> lst1 = {1, 2, 3, 4};
    list<int> lst2, lst3;
    copy(lst.begin(), lst.end(), front_inserter(lst2));          //拷贝完成之后, lst2包含4 3 2 1
    copy(lst.begin(), lst.end(), inserter(lst3, llst3.begin())); //拷贝完成之后, lst2包含1 2 3 4

     

    代码:

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<vector>
     4 #include<list>
     5 #include<iterator>
     6 using namespace std;
     7 
     8 int main()
     9 {
    10     vector<int> vi = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    11     list<int> li1, li2, li3;
    12     unique_copy(vi.begin(), vi.end(), inserter(li1, li1.begin()));
    13     for (auto v : li1)
    14         cout << v << " ";
    15     cout << endl;
    16 
    17     unique_copy(vi.begin(), vi.end(), back_inserter(li2));
    18     for (auto v : li2)
    19         cout << v << " ";
    20     cout << endl;
    21 
    22     unique_copy(vi.begin(), vi.end(), front_inserter(li3));
    23     for (auto v : li3)
    24         cout << v << " ";
    25     cout << endl;
    26 
    27     return 0;

    输出结果:

  • 相关阅读:
    [Python] Python 学习
    [其它] 学习杂记
    [.NET] 《Effective C#》快速笔记(三)- 使用 C# 表达设计
    [.NET] 《Effective C#》快速笔记(二)- .NET 资源托管
    [python] 小游戏
    [.NET] 《Effective C#》快速笔记(一)- C# 语言习惯
    [angularjs] AngularJs 知识回顾
    [C#] 使用 StackExchange.Redis 封装属于自己的 RedisHelper
    [.NET] 一步步打造一个简单的 MVC 电商网站
    [.NET] 一步步打造一个简单的 MVC 电商网站
  • 原文地址:https://www.cnblogs.com/sunbines/p/9110862.html
Copyright © 2020-2023  润新知