zoukankan      html  css  js  c++  java
  • 插入迭代器在标准算法中的作用及使用方法

    前言

      请问:算法能不能做一些改变容器基本大小的操作?要知道使用标准迭代器不会改变容器的大小,那么怎样让算法去做一些诸如往容器中插入元素的操作呢?答案很简单,使用“ 不标准 ”的迭代器呗!本文将介绍一种“ 非标准 ”迭代器 --- 插入迭代器,使用它和相关的标准算法就可以灵活的往容器中插入数据。

    问题提出

      使用标准算法往任意顺序容器中插入一组元素。

    错误示例

    下面代码意图往一个顺序容器中插入10个0:

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     vector<int> vec;
    10 
    11     // 往vec中写入10个0
    12     fill_n(vec.begin(), 10, 0);
    13 
    14     /*
    15      * 输出容器
    16     */
    17     for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++)
    18         cout << *it << " ";
    19 
    20     cout << endl;
    21     
    22     return 0;
    23 }

    运行结果:

    算法参数vec.begin()是一个标准的迭代器,使用它作为参数不可能改变容器的大小,故试图往容器中插入数据的操作肯定会失败。

    正确示例

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 // 使用非标准的迭代器都要包含这个头文件
     5 #include <iterator>
     6 
     7 using namespace std;
     8 
     9 int main()
    10 {
    11     vector<int> vec;
    12     // 往vec中写入10个0,第一个参数是插入迭代器。
    13     fill_n(back_inserter(vec), 10, 0);
    14 
    15     /*
    16      * 输出容器
    17     */
    18     for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++)
    19         cout << *it << " ";
    20 
    21     cout << endl;
    22     
    23     return 0;
    24 }

    运行结果:

    使用了插入迭代器,问题自然迎刃而解。

    后记

      除了本文示例中的fill_n算法外,其他算法只要涉及到往算法中插入元素,十有八九也得用到插入迭代器。比如copy算法等。

  • 相关阅读:
    python获取公网ip,本地ip及所在国家城市等相关信息收藏
    Tkinter的下拉列表Combobox
    pyinstaller打包pyqt文件(转)
    通过pyqt5实现俄罗斯方块游戏例子
    pygame游戏开发入门例子
    python界面Tkinter编程(tkMessageBox对话框使用)
    python tkinter-菜单栏
    python tkinter-容器、子窗体
    HUNNU--湖师大--11409--Skill
    [置顶] 博客搬迁到新地址。
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3226426.html
Copyright © 2011-2022 走看看