📜  C++ STL中的std :: istream_iterator和std :: ostream_iterator(1)

📅  最后修改于: 2023-12-03 14:59:46.765000             🧑  作者: Mango

C++ STL中的std :: istream_iterator和std :: ostream_iterator

在C++ STL中,iostream_iterator和ostream_iterator是经常被程序员使用的两个迭代器。这两个迭代器的主要作用是读取和写入标准输入和标准输出设备(键盘和屏幕)。

std :: istream_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_iteratorcopy() 成员函数将从 iit 开始到 eos 结束的输入流数据复制到 vec1 容器中。

std :: ostream_iterator

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_iteratorcopy() 成员函数复制向量值到 oit 输出迭代器中。oit 会将数据写入 cout 中,并将每个值之间添加一个空格分隔符。

总结

iostream_iterator 和 ostream_iterator 是常用的迭代器,它们分别用于从输入流和输出流读取和写入数据。它们均定义在 <iterator> 头文件中。在使用时,需要指定要读取或写入的数据类型以及相应的字符类型和特性(如果需要)。通过了解这两个迭代器的使用,您可以轻松地读取从键盘输入的数据,并将结果输出到屏幕上。