C++ 输出迭代器

C++ 输出迭代器

  • 输出迭代器用于修改容器中的值。
  • 解引用输出迭代器允许我们改变容器中的值。
  • 它不允许我们从容器中读取值。
  • 它是单向且只写的迭代器。
  • 它可以递增,但不能递减。
  • 输出迭代器可以使用的运算符有 递增运算符(++)、递减运算符(–)和赋值运算符(=)
  • 输出迭代器的两个主要子类是:
    • 插入迭代器
    • 输出流迭代器

C++ 输出迭代器

插入迭代器

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

语法

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被应用于copy算法,将向量v2的元素插入到由它指定的位置的向量v1中。

Ostream iterator

  • ostream迭代器用于连续写入输出流(比如cout)的输出迭代器。
  • 使用basic_ostream对象创建ostream迭代器。
  • 当在ostream迭代器上使用赋值运算符时,它会将一个新元素插入到输出流中。

语法

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

Ostream迭代器类的成员函数

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,

输出迭代器的特点

  • 相等/不相等运算符 :输出迭代器不能通过使用相等或不相等运算符进行比较。假设X和Y是两个迭代器:
X==Y;  invalid
X!=Y;   invalid
  • Dereferencing :输出迭代器可以被解引用为左值。
*X=7;
  • Incrementable : 一个输出迭代器可以通过使用 operator++() 函数进行递增。
X++;
++X;

输出迭代器的限制

  • 赋值但不能访问 :我们可以将一个输出迭代器作为左值进行赋值,但我们不能将其作为右值进行访问。

    假设’A’是一个输出迭代器类型,’x’是一个整数变量:

*A = x;                   // valid
  x = *A;                 // invalid
  • 无法减量 :我们可以使用operator++()函数增加输出迭代器,但是无法减少输出迭代器。

假设 ‘A’ 是一个输出迭代器类型:

A++;            // not valid
++A;            // not valid
  • 多次通过算法 :输出迭代器不能用作多次通过算法。因为输出迭代器是单向的,只能向前移动。因此,不能使用它来多次遍历容器。

  • 关系运算符 :输出迭代器不能通过使用任何关系运算符进行比较。

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

A = =B;        // not valid
A = =B;        // not valid
  • 算术运算符 :输出迭代器不能与算术运算符一起使用。因此,我们可以说输出迭代器只能以顺序方式前进。

假设’A’是一个输出迭代器

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程