C++教程
C++控制语句
C++函数
C++数组
C++指针
C++对象
C++继承
C++多态
C++抽象
C++常用
C++ STL教程
C++迭代器
C++程序

C++ 输出迭代器

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

插入迭代器

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

语法

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

参数

x : 这是要在其中插入新元素的容器。
它: 它是一个指向要修改位置的迭代器对象。
我们来看一个简单的示例:
#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应用于复制算法,以将 Vector v2的元素插入 Vector 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 : 这是要插入到容器中的元素的类型。 图表: 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的对象,用于在 Vector 元素之间添加定界符'。
让我们看一下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
算术运算符: 输出迭代器不能与算术运算符一起使用。因此,可以说输出迭代器仅按顺序前进。
假设" A"是输出迭代器:
A + 2;               // invalid
A + 5;               // invalid   

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4