output iterator是用于修改容器中值的迭代器。
取消引用输出迭代器使我们能够更改容器的值。
不允许我们从容器中读取值。
这是一个单向且只写的迭代器。
可以递增,但不能递减。
可用于输出迭代器的操作符是增量运算符( ),减量运算符(-)和赋值运算符(=)。
输出迭代器的两个主要子类是: 插入迭代器 流迭代器
插入迭代器
插入迭代器是用于将元素插入指定位置的迭代器。
insert_iterator上的赋值运算符将新元素插入当前位置。
语法
template<class container, class iterator> insert_iteratorinserter(container &x,iterator it);
参数
x : 这是要在其中插入新元素的容器。 它: 它是一个指向要修改位置的迭代器对象。 我们来看一个简单的示例:
#include // std::cout
#include // std::front_inserter
#include // std::list
#include // std::copy
using namespace std;
int main () {
vector v1,v2;
for (int i=1; i<=5; i )
{
v1.push_back(i);
v2.push_back(i 2);
}
vector::iterator it = v1.begin();
advance (it,3);
copy (v2.begin(),v2.end(),inserter(v1,it));
cout<<"elements of v1 are :";
for ( it = v1.
输出:
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>
class ostream_iterator;
ostream iterator类的成员函数
ostream_iterator& operator=(const t& value);
ostream_iterator& operator*();
ostream_iterator& operator ();
ostream_iterator& operator (int);
参数
t : 这是要插入到容器中的元素的类型。
图表: ostream可以处理的元素类型,例如char ostream。
特征: 这些是流为元素处理的字符特征。 让我们看一个简单的示例:
#include
#include
#include
#include
using namespace std;
int main()
{
vector v;
for(int i=1;i<=5;i )
{
v.push_back(i*10);
}
ostream_iterator out(cout,",");
copy(v.begin(),v.end(),out);
return 0;
}
输出:
10,20,30,40,50
在上面的示例中,out是ostream_iterator的对象,用于在 vector 元素之间添加定界符'。 让我们看一下ostream迭代器的另一个简单示例:
#include
#include
#include
#include
using namespace std;
int main()
{
ostream_iterator 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