ostream_iterator 类
类模板 ostream_iterator 描述一个输出迭代器对象,该对象使用提取 operator <<
将连续的元素写入输出流。
语法
template <class Type class CharType = char class Traits = char_traits <CharType>>
class ostream_iterator
参数
类型
要插入到输出流的对象的类型。
CharType
表示 ostream_iterator
字符类型的类型。 此参数为可选参数,默认值为 char
。
特征
表示 ostream_iterator
字符类型的类型。 此参数为可选参数,默认值为 char_traits
<CharType>。
ostream_iterator 类必须满足对输出迭代器的需求。 可使用 ostream_iterator
直接向输出流中写入算法。
构造函数
构造函数 | 说明 |
---|---|
ostream_iterator | 构造已初始化并限定写入输出流的 ostream_iterator 。 |
Typedef
类型名称 | 说明 |
---|---|
char_type | 为 ostream_iterator 的字符类型提供的类型。 |
ostream_type | 为 ostream_iterator 的流类型提供的类型。 |
traits_type | 为 ostream_iterator 的字符特征类型提供的类型。 |
运算符
运算符 | 说明 |
---|---|
operator* | 用于实现输出迭代器表达式 * i = x 的取消引用运算符。 |
operator++ | 一种非功能性递增运算符,可向调用该运算之前所处理的同一对象返回 ostream_iterator 。 |
operator= | 用于实现输出迭代器表达式 * i = x 以写入输出流的赋值运算符。 |
要求
标头:<iterator>
命名空间: std
ostream_iterator::char_type
为迭代器的字符类型提供的类型。
typedef CharType char_type;
注解
该类型是模板参数 CharType
的同义词。
示例
// ostream_iterator_char_type.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
typedef ostream_iterator<int>::char_type CHT1;
typedef ostream_iterator<int>::traits_type CHTR1;
// ostream_iterator for stream cout
// with new line delimiter:
ostream_iterator<int, CHT1, CHTR1> intOut ( cout , "\n" );
// Standard iterator interface for writing
// elements to the output stream:
cout << "The integers written to the output stream\n"
<< "by intOut are:" << endl;
*intOut = 10;
*intOut = 20;
*intOut = 30;
}
/* Output:
The integers written to the output stream
by intOut are:
10
20
30
*/
ostream_iterator::operator*
用于实现输出迭代器表达式 * ii = x 的取消引用运算符。
ostream_iterator<Type, CharType, Traits>& operator*();
返回值
对 ostream_iterator
的引用。
备注
ostream_iterator
必须满足的输出迭代器的要求只要求表达式 * ii = t 有效,并且本身未提及 operator
或 operator=
。 此实现中的成员运算符返回 *this
。
示例
// ostream_iterator_op_deref.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
// ostream_iterator for stream cout
// with new line delimiter
ostream_iterator<int> intOut ( cout , "\n" );
// Standard iterator interface for writing
// elements to the output stream
cout << "Elements written to output stream:" << endl;
*intOut = 10;
intOut++; // No effect on iterator position
*intOut = 20;
*intOut = 30;
}
/* Output:
Elements written to output stream:
10
20
30
*/
ostream_iterator::operator++
一种非功能性递增运算符,可向调用该运算之前所处理的同一对象返回 ostream_iterator
。
ostream_iterator<Type, CharType, Traits>& operator++();
ostream_iterator<Type, CharType, Traits> operator++(int);
返回值
对 ostream_iterator
的引用。
备注
这些成员运算符均返回 *this
。
示例
// ostream_iterator_op_incr.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
// ostream_iterator for stream cout
// with new line delimiter
ostream_iterator<int> intOut ( cout , "\n" );
// standard iterator interface for writing
// elements to the output stream
cout << "Elements written to output stream:" << endl;
*intOut = 10;
intOut++; // No effect on iterator position
*intOut = 20;
*intOut = 30;
}
/* Output:
Elements written to output stream:
10
20
30
*/
ostream_iterator::operator=
用于实现输出迭代器表达式 * i
= x
以写入输出流的赋值运算符。
ostream_iterator<Type, CharType, Traits>& operator=(const Type& val);
参数
val
要插入到输出流的 Type
类型的对象的值。
返回值
运算符将 val 插入到与对象关联的输出流中,后跟 ostream_iterator 构造函数中指定的分隔符(如果有),然后将引用返回到 ostream_iterator
。
注解
ostream_iterator
必须满足的输出迭代器的要求要求仅表达式 * ii
= t
有效,并且本身未提及 operator 或 operator=。 此成员运算符将返回 *this
。
示例
// ostream_iterator_op_assign.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
// ostream_iterator for stream cout
// with new line delimiter
ostream_iterator<int> intOut ( cout , "\n" );
// Standard iterator interface for writing
// elements to the output stream
cout << "Elements written to output stream:" << endl;
*intOut = 10;
intOut++; // No effect on iterator position
*intOut = 20;
*intOut = 30;
}
/* Output:
Elements written to output stream:
10
20
30
*/
ostream_iterator::ostream_iterator
构造已初始化并限定写入输出流的 ostream_iterator
。
ostream_iterator(
ostream_type& _Ostr);
ostream_iterator(
ostream_type& _Ostr,
const CharType* _Delimiter);
参数
_Ostr
将遍历的 ostream_iterator::ostream_type 类型的输出流。
_Delimiter
用于插入到值之间的输出流中的分隔符。
备注
第一个构造函数通过 &_Ostr
初始化输出流指针。 分隔符字符串指针将指定一个空字符串。
第二个构造函数通过 &_Ostr
初始化输出流指针,并通过 _Delimiter 初始化分隔符字符串指针。
示例
// ostream_iterator_ostream_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
// ostream_iterator for stream cout
ostream_iterator<int> intOut ( cout , "\n" );
*intOut = 10;
intOut++;
*intOut = 20;
intOut++;
int i;
vector<int> vec;
for ( i = 1 ; i < 7 ; ++i )
{
vec.push_back ( i );
}
// Write elements to standard output stream
cout << "Elements output without delimiter: ";
copy ( vec.begin ( ), vec.end ( ),
ostream_iterator<int> ( cout ) );
cout << endl;
// Write elements with delimiter " : " to output stream
cout << "Elements output with delimiter: ";
copy ( vec.begin ( ), vec.end ( ),
ostream_iterator<int> ( cout, " : " ) );
cout << endl;
}
/* Output:
10
20
Elements output without delimiter: 123456
Elements output with delimiter: 1 : 2 : 3 : 4 : 5 : 6 :
*/
ostream_iterator::ostream_type
为迭代器的流类型提供的类型。
typedef basic_ostream<CharType, Traits> ostream_type;
注解
该类型为 basic_ostream<CharType
, Traits
> 的同义词,它是 iostream 层次结构的一个流类,用于定义可用于写入的对象。
示例
有关如何声明和使用 ostream_type
的示例,请参阅 ostream_iterator。
ostream_iterator::traits_type
为迭代器的字符特征类型提供的类型。
typedef Traits traits_type;
备注
该类型是模板参数 Traits
的同义词。
示例
// ostream_iterator_traits_type.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
// The following not OK, but are just the default values:
typedef ostream_iterator<int>::char_type CHT1;
typedef ostream_iterator<int>::traits_type CHTR1;
// ostream_iterator for stream cout
// with new line delimiter:
ostream_iterator<int, CHT1, CHTR1> intOut ( cout , "\n" );
// Standard iterator interface for writing
// elements to the output stream:
cout << "The integers written to output stream\n"
<< "by intOut are:" << endl;
*intOut = 1;
*intOut = 10;
*intOut = 100;
}
/* Output:
The integers written to output stream
by intOut are:
1
10
100
*/