C++输出迭代器解析和用法

本文概述

  • 插入迭代器
  • 句法
  • 参量
  • Ostream迭代器
  • 句法
  • 参量
  • 输出迭代器的功能
  • 输出迭代器的局限性
  • 输出迭代器是用于修改容器中值的迭代器。
  • 取消引用输出迭代器可以使我们更改容器的值。
  • 它不允许我们从容器中读取值。
  • 它是一种单向且只写的迭代器。
  • 可以增加, 但不能减少。
  • 可以用于输出迭代器的运算符是增量运算符(++), 减量运算符(-)和赋值运算符(=)。
  • 输出迭代器有两个主要的子类:插入迭代器ostream迭代器
C++输出迭代器解析和用法

文章图片
插入迭代器
  • 插入迭代器是用于将元素插入指定位置的迭代器。
  • 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)的输出迭代器。
  • 使用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。
  • 特征:这些是流为元素处理的字符特征。
让我们看一个简单的例子:
#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

  • 取消引用:可以将输出迭代器作为左值取消引用。
*X=7;

  • 可递增的:可以使用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

  • 算术运算符:输出迭代器不能与算术运算符一起使用。因此, 可以说输出迭代器仅按顺序前进。
【C++输出迭代器解析和用法】假设“ A”是输出迭代器:
A + 2; // invalid A + 5; // invalid

    推荐阅读