C++ Output 迭代器

C++ Output 迭代器 首页 / C++入门教程 / C++ Output 迭代器
  • Output Iterator是用于修改集合中值的迭代器。
  • 取消引用Output Iterator(输出迭代器)使我们能够更改集合的值。
  • 不允许我们从集合中读取值。
  • 这是一个单向且只写的迭代器。
  • 可以递增,但不能递减。
  • 可用于Output Iterator(输出迭代器)的操作符是增量运算符(++),减量运算符(-)和赋值运算符(=)
  • Output Iterator(输出迭代器)的两个主要子类是:
    • 插入迭代器
    • ostream流迭代器
    C++ Output Iterator

    插入迭代器

    • 插入迭代器是用于将元素插入指定位置的迭代器。
    • insert_iterator上的赋值运算符将新元素插入当前位置。

    语法

    template<class Container, class Iterator>
    insert_iterator<container> inserter(Container &x,Iterator it);

    迭代器参数

    x :这是要在其上插入新元素的集合。

    it :它是一个迭代器对象,指向要修改的位置。

    让我们看一个简单的示例:

    #include <iostream>    //std::cout
    #include <iterator>    //std::front_inserter
    #include <vector>      //std::list
    #include <algorithm>   //std::copy
    using namespace std;
    int main () {
      vector<int> v1,v2;
      for (int i=1; i<=5; i++)
      { 
      v1.push_back(i); 
      v2.push_back(i+2);
      }
      vector<int>::iterator it = v1.begin();
      advance (it,3);
      copy (v2.begin(),v2.end(),inserter(v1,it));
      cout<<"Elements of v1 are :";
      for (  it = v1.begin(); it!= v1.end(); ++it )
      cout << ' ' << *it;
      cout << '\n';
      return 0;
    }

    输出:

    Elements of v1 are : 1 2 3 3 4 5 6 7 4 5
    

    在上面的示例中,将insert_iterator应用于复制算法,以将向量v2的元素插入到向量v1所指向的指定位置。

    Ostream迭代器

    • ostream迭代器是用于依次写入输出流(例如cout)的Output Iterator(输出迭代器)。
    • 使用basic_ostream对象创建一个ostream迭代器。
    • 在ostream迭代器上使用辅助运算符时,它会在输出流中插入一个新元素。

    语法

    template<class T, class charT=char, class traits=char_traits<charT>>
    class ostream_iterator;

    Ostream Iterator类的成员函数

    Ostream_iterator<T, charT, traits>& operator=(const T& value);
    Ostream_iterator<T, charT, traits>& operator*();
    Ostream_iterator<T, charT, traits>& operator++();
    Ostream_iterator<T, charT, traits>& operator++(int);

    参数

    • T :这是要插入到集合中的元素的类型。
    • charT :ostream可以处理的元素类型,例如char ostream。
    • traits:这些是流为元素处理的字符特征。

    让我们看一个简单的示例:

    #include <iostream>
    #include<iterator>
    #include<vector>
    #include<algorithm>
    using namespace std;
    int main()
    {
       vector<int> v;
       for(int i=1;i<=5;i++)
       {
           v.push_back(i*10);
       }
       ostream_iterator<int> out(cout,",");
       copy(v.begin(),v.end(),out);
       return 0;
    }

    输出:

    10,20,30,40,50
    

    在上面的示例中,out是ostream_iterator的对象,用于在向量元素之间添加定界符','。

    让我们看一下ostream迭代器的另一个简单示例:

    #include <iostream>
    #include<iterator>
    #include<vector>
    #include<algorithm>
    using namespace std;
    int main()
    {
       ostream_iterator<int> out(cout,",");
       *out = 5;
       out++;
       *out = 10;
       out++;
       *out = 15;
       return 0;
    }

    输出:

    5,10,15,
    

    输出迭代器函数

    • 相等/不相等运算符:使用相等或不相等运算符无法比较Output Iterator(输出迭代器)。假设X和Y是两个迭代器:
    X==Y;  invalid
    X!=Y;   invalid
    • 取消引用:可以将Output Iterator(输出迭代器)作为左值取消引用。
    • 可增量:可以使用operator ++()函数来递增Output Iterator(输出迭代器)。
    X++;
    ++X;

    迭代器局限性

    • 分配但不能访问:我们可以将Output Iterator(输出迭代器)分配为左值,但不能将其作为右值来访问。

    假设" A"是Output Iterator(输出迭代器)类型," x"是整数变量:

    *A = x;                  //valid
      x = *A;                //invalid
    • 不能递减:我们可以通过使用operator ++()函数来递增Output Iterator(输出迭代器),但是不能递减Output Iterator(输出迭代器)。

    假设" A"是Output Iterator(输出迭代器)类型:

    A++;           //not valid
    ++A;           //not valid
    • 多次通过算法:Output Iterator(输出迭代器)不能用作多次通过算法。由于Output Iterator(输出迭代器)是单向的,因此只能向前移动。因此,它不能用于在集合中多次移动
    • 关系运算符:不能使用任何关系运算符来比较Output Iterator(输出迭代器)。

    假设" A"和" B"是两个迭代器:

    A = =B;       //not valid
    A = =B;       //not valid
    • 算术运算符:Output Iterator(输出迭代器)不能与算术运算符一起使用。因此,可以说Output Iterator(输出迭代器)仅按顺序前进。

    假设" A"是Output Iterator(输出迭代器):

    A + 2;              //invalid
    A + 5;              //invalid   

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

Go语言核心36讲 -〔郝林〕

如何设计一个秒杀系统 -〔许令波〕

玩转Spring全家桶 -〔丁雪丰〕

苏杰的产品创新课 -〔苏杰〕

检索技术核心20讲 -〔陈东〕

etcd实战课 -〔唐聪〕

如何落地业务建模 -〔徐昊〕

深入C语言和程序运行原理 -〔于航〕

深入浅出分布式技术原理 -〔陈现麟〕

好记忆不如烂笔头。留下您的足迹吧 :)