istream_iterator 类

描述一个输入迭代器对象。 它从输入流中提取 Type 类的对象,并通过其存储的、指向 basic_istream<CharType, Traits> 的 pointer 类型对象访问此输入流。

语法

template <class Type, class CharType = char, class Traits = char_traits<CharType>, class Distance = ptrdiff_t>
class istream_iterator
: public iterator<
    input_iterator_tag, Type, Distance,
    const Type *,
    const Type&>;

参数

类型
要从输入流中提取的对象的类型。

CharType
表示 istream_iterator 字符类型的类型。 此参数为可选参数,默认值为 char

特征
表示 istream_iterator 字符类型的类型。 此参数为可选参数,默认值为 char_traits<CharType>。

距离
表示 istream_iterator 差异类型的带符号的整数类型。 此参数为可选参数,默认值为 ptrdiff_t

构造或递增带有非 null 存储指针的 istream_iterator 类对象后,此对象将尝试从关联的输入流提取和存储 Type 类型的对象。 如果提取失败,对象将使用 null 指针有效替换存储指针,从而设置序列末尾指示符。

构造函数

构造函数 说明
istream_iterator 构造一个流结尾迭代器作为默认的 istream_iterator,或作为一个 istream_iterator,以便初始化为它开始读取的迭代器流类型。

Typedef

类型名称 说明
char_type istream_iterator 的字符类型提供的类型。
istream_type istream_iterator 的流类型提供的类型。
traits_type istream_iterator 的字符特征类型提供的类型。

运算符

运算符 说明
operator* 此解引用运算符返回由 Type 定址的、istream_iterator 类型的存储对象。
operator-> 返回成员的值(如果有)。
operator++ 从输入流提取增量对象,或在递增对象之前复制对象并返回副本。

要求

标头:<iterator>

命名空间: std

istream_iterator::char_type

istream_iterator 的字符类型提供的类型。

typedef CharType char_type;

注解

该类型是模板参数 Chartype 的同义词。

示例

// istream_iterator_char_type.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;

   typedef istream_iterator<int>::char_type CHT1;
   typedef istream_iterator<int>::traits_type CHTR1;

   // Standard iterator interface for reading
   // elements from the input stream:
   cout << "Enter integers separated by spaces & then\n"
        << " any character ( try example: '2 4 f' ): ";

   // istream_iterator for reading int stream
   istream_iterator<int, CHT1, CHTR1> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int, CHT1, CHTR1> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

istream_iterator::istream_iterator

构造一个流结尾迭代器作为默认的 istream_iterator,或作为一个 istream_iterator,以便初始化为它开始读取的迭代器流类型。

istream_iterator();

istream_iterator(istream_type& _Istr);

参数

_Istr
要读取以用于初始化 istream_iterator 的输入流。

备注

第一个构造函数通过空指针初始化输入流指针,并创建流末尾迭代器。 第二个构造函数通过 &_Istr 初始化输入流指针,然后尝试提取和存储 Type 类型的对象。

流末尾迭代器可用于测试 istream_iterator 是否已到达流末尾。

示例

// istream_iterator_istream_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>

int main( )
{
   using namespace std;

   // Used in conjunction with copy algorithm
   // to put elements into a vector read from cin
   vector<int> vec ( 4 );
   vector <int>::iterator Iter;

   cout << "Enter 4 integers separated by spaces & then\n"
        << " a character ( try example: '2 4 6 8 a' ): ";
   istream_iterator<int> intvecRead ( cin );

   // Default constructor will test equal to end of stream
   // for delimiting source range of vecor
   copy ( intvecRead , istream_iterator<int>( ) , vec.begin ( ) );
   cin.clear ( );

   cout << "vec = ";
   for ( Iter = vec.begin( ) ; Iter != vec.end( ) ; Iter++ )
      cout << *Iter << " "; cout << endl;
}

istream_iterator::istream_type

istream_iterator 的流类型提供的类型。

typedef basic_istream<CharType, Traits> istream_type;

备注

该类型是 basic_istream<CharType, Traits> 的同义词。

示例

有关如何声明和使用 istream_type 的示例,请参阅 istream_iterator

istream_iterator::operator*

此解引用运算符返回由 Type 定址的、istream_iterator 类型的存储对象。

const Type& operator*() const;

返回值

Type 类型的存储对象。

示例

// istream_iterator_operator.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>

int main( )
{
   using namespace std;

   cout << "Enter integers separated by spaces & then\n"
        << " a character ( try example: '2 4 6 8 a' ): ";

   // istream_iterator from stream cin
   istream_iterator<int> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

istream_iterator::operator->

返回成员的值(如果有)。

const Type* operator->() const;

返回值

成员的值(如有)。

注解

i->m 等效于 (*i).m

运算符返回 &*this

示例

// istream_iterator_operator_vm.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>
#include <complex>

using namespace std;

int main( )
{
   cout << "Enter complex numbers separated by spaces & then\n"
        << " a character pair ( try example: '(1,2) (3,4) (a,b)' ): ";

   // istream_iterator from stream cin
   istream_iterator< complex<double> > intRead ( cin );

   // End-of-stream iterator
   istream_iterator<complex<double> > EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading the real part: " << intRead ->real( ) << endl;
      cout << "Reading the imaginary part: " << intRead ->imag( ) << endl;
      ++intRead;
   }
   cout << endl;
}

istream_iterator::operator++

从输入流提取增量对象,或在递增对象之前复制对象并返回副本。

istream_iterator<Type, CharType, Traits, Distance>& operator++();

istream_iterator<Type, CharType, Traits, Distance> operator++(int);

返回值

第一个成员运算符返回对输入流中提取的 Type 类型的递增对象的一个引用,第二个成员函数返回此对象的一个副本。

示例

// istream_iterator_operator_incr.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>

int main( )
{
   using namespace std;

   cout << "Enter integers separated by spaces & then\n"
        << " a character ( try example: '2 4 6 8 a' ): ";

   // istream_iterator from stream cin
   istream_iterator<int> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

istream_iterator::traits_type

istream_iterator 的字符特征类型提供的类型。

typedef Traits traits_type;

备注

该类型是模板参数 Traits 的同义词。

示例

// istream_iterator_traits_type.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>

int main( )
{
   using namespace std;

   typedef istream_iterator<int>::char_type CHT1;
   typedef istream_iterator<int>::traits_type CHTR1;

   // Standard iterator interface for reading
   // elements from the input stream:
   cout << "Enter integers separated by spaces & then\n"
        << " any character ( try example: '10 20 a' ): ";

   // istream_iterator for reading int stream
   istream_iterator<int, CHT1, CHTR1> intRead ( cin );

   // End-of-stream iterator
   istream_iterator<int, CHT1, CHTR1> EOFintRead;

   while ( intRead != EOFintRead )
   {
      cout << "Reading:  " << *intRead << endl;
      ++intRead;
   }
   cout << endl;
}

另请参阅

input_iterator_tag 结构
iterator 结构
<iterator>
C++ 标准库中的线程安全
C++ 标准库参考