📅  最后修改于: 2023-12-03 14:59:46.765000             🧑  作者: Mango
在C++ STL中,iostream_iterator和ostream_iterator是经常被程序员使用的两个迭代器。这两个迭代器的主要作用是读取和写入标准输入和标准输出设备(键盘和屏幕)。
std::istream_iterator
是一个输入迭代器,它从输入流中读取数据。它是通过以下代码定义的:
template <class T, class charT=char, class traits=char_traits<charT>, class Distance=ptrdiff_t>
class istream_iterator;
使用 istream_iterator 时,您需要指定数据的类型、字符类型以及任何特性。一旦定义了 istream_iterator 的类型,就可以使用其成员函数。例如:
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main()
{
vector<int> vec1;
istream_iterator<int> iit(cin);
istream_iterator<int> eos; // end-of-stream iterator
copy(iit, eos, back_inserter(vec1));
return 0;
}
在上述示例中,我们从 cin
输入流中读入数值类型的数据,并将这些值存储在 vec1
向量对象中。istream_iterator
的 copy()
成员函数将从 iit
开始到 eos
结束的输入流数据复制到 vec1
容器中。
std::ostream_iterator
是一个输出迭代器,它将数据写入输出流中。它是通过以下代码定义的:
template <class T, class charT=char, class traits=char_traits<charT>>
class ostream_iterator;
使用 ostream_iterator 时,您需要指定数据的类型、字符类型以及任何特性。一旦定义了 ostream_iterator 的类型,就可以使用其成员函数。例如:
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main()
{
vector<int> vec1 { 1, 2, 3, 4, 5 };
ostream_iterator<int> oit(cout, " ");
copy(vec1.begin(), vec1.end(), oit);
return 0;
}
在上述示例中,我们创建一个 vec1
向量对象,并将其中的值输出到 cout
输出流对象中。我们使用 ostream_iterator
的 copy()
成员函数复制向量值到 oit
输出迭代器中。oit
会将数据写入 cout
中,并将每个值之间添加一个空格分隔符。
iostream_iterator 和 ostream_iterator 是常用的迭代器,它们分别用于从输入流和输出流读取和写入数据。它们均定义在 <iterator>
头文件中。在使用时,需要指定要读取或写入的数据类型以及相应的字符类型和特性(如果需要)。通过了解这两个迭代器的使用,您可以轻松地读取从键盘输入的数据,并将结果输出到屏幕上。