本文概述
- 插入迭代器
- 句法
- 参量
- Ostream迭代器
- 句法
- 参量
- 输出迭代器的功能
- 输出迭代器的局限性
- 输出迭代器是用于修改容器中值的迭代器。
- 取消引用输出迭代器可以使我们更改容器的值。
- 它不允许我们从容器中读取值。
- 它是一种单向且只写的迭代器。
- 可以增加, 但不能减少。
- 可以用于输出迭代器的运算符是增量运算符(++), 减量运算符(-)和赋值运算符(=)。
- 输出迭代器有两个主要的子类:插入迭代器ostream迭代器
文章图片
插入迭代器
- 插入迭代器是用于将元素插入指定位置的迭代器。
- 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;
// valid
x = *A;
// invalid
- 它不能递减:我们可以通过使用operator ++()函数来递增输出迭代器, 但不能递减输出迭代器。
A++;
// not valid
++A;
// not valid
- 多次通过算法:输出迭代器不能用作多次通过算法。由于输出迭代器是单向的, 因此只能向前移动。因此, 它不能用于在容器中多次移动
- 关系运算符:无法使用任何关系运算符来比较输出迭代器。
A = =B;
// not valid
A = =B;
// not valid
- 算术运算符:输出迭代器不能与算术运算符一起使用。因此, 可以说输出迭代器仅按顺序前进。
A + 2;
// invalid
A + 5;
// invalid
推荐阅读
- C++迭代器用法
- C++前向迭代器用法
- C++双向迭代器用法
- C++中的阿姆斯特朗数
- 生成斐波那契三角形的C++程序
- C++使用递归
- C++程序打印数字三角形
- C++程序打印字母三角形
- C++ map映射函数用法