SGI

back_insert_iterator<BackInsertionSequence>

类别:迭代器,适配器 组件类型:类型

描述

back_insert_iterator是一个迭代器适配器,它充当 输出迭代器:通过back_insert_iterator进行赋值会在 后插入序列 的最后一个元素之后插入一个对象。 [1]

示例

list<int> L;
L.push_front(3);
back_insert_iterator<list<int> > ii(L);
*ii++ = 0;
*ii++ = 1;
*ii++ = 2;
copy(L.begin(), L.end(), ostream_iterator<int>(cout, " "));
// The values that are printed are 3 0 1 2

定义

定义在标准头文件 iterator 中,以及非标准的向后兼容头文件 iterator.h 中。

模板参数

参数 描述 默认值
BackInsertionSequence 将要插入值的 后插入序列 的类型。  

模型

输出迭代器。插入迭代器的一组值类型(如 输出迭代器 要求中定义的)包含单个类型BackInsertionSequence::value_type.

类型要求

模板参数BackInsertionSequence必须是 后插入序列

公共基类

无。

成员

成员 定义位置 描述
back_insert_iterator(BackInsertionSequence&) back_insert_iterator 见下文。
back_insert_iterator(const back_insert_iterator&) 平凡迭代器 复制构造函数
back_insert_iterator& 
operator=(const back_insert_iterator&)
平凡迭代器 赋值运算符
back_insert_iterator& operator*() 输出迭代器 用于实现 输出迭代器 表达式*i = x. [2]
back_insert_iterator& 
operator=(const BackInsertionSequence::value_type&)
输出迭代器 用于实现 输出迭代器 表达式*i = x. [2]
back_insert_iterator& operator++() 输出迭代器 前递增。
back_insert_iterator& operator++(int) 输出迭代器 后递增。
output_iterator_tag 
iterator_category(const back_insert_iterator&)
迭代器标签 返回迭代器的类别。这是一个全局函数,不是成员函数。
template<class BackInsertionSequence>
back_insert_iterator<BackInsertionSequence>
back_inserter(BackInsertionSequence& S)
back_insert_iterator 见下文。

新成员

这些成员在 输出迭代器 要求中没有定义,而是特定于back_insert_iterator.
成员函数 描述
back_insert_iterator(BackInsertionSequence& S) 构造一个back_insert_iterator它会在S的最后一个元素之后插入对象。(也就是说,它会在S的末尾迭代器之前插入对象。)
template<class BackInsertionSequence>
back_insert_iterator<BackInsertionSequence>
back_inserter(BackInsertionSequence& S);
等同于back_insert_iterator<BackInsertionSequence>(S). [3] 这是一个全局函数,而不是成员函数。

注意

[1] 注意通过BackInsertionSequence::iterator进行赋值和通过back_insert_iterator<BackInsertionSequence>进行赋值之间的区别。如果i是一个有效的BackInsertionSequence::iterator,那么它指向 后插入序列 中的某个特定元素;表达式*i = tt替换该元素,并且不会改变 后插入序列 中元素的总数。但是,如果ii是一个有效的back_insert_iterator<BackInsertionSequence>是,那么表达式*ii = t等同于表达式seq.push_back(t)。也就是说,它不会覆盖任何seq的元素,并且会改变seq的大小。

[2] 注意如何通过back_insert_iterator进行赋值。一般来说,一元operator*必须被定义,以便它返回一个代理对象,其中代理对象定义了operator=以执行插入操作。在这种情况下,为了简单起见,代理对象是back_insert_iterator本身。也就是说,*i仅返回i,并且*i = t等同于i = t。但是,你不应该依赖这种行为。这是一个实现细节,并且不能保证在将来的版本中保持一致。

[3] 此函数仅为了方便而存在:由于它是一个非成员函数,因此可以推断出模板参数,并且不需要显式声明back_insert_iterator的类型。例如,反转一个范围并将其插入 后插入序列 的末尾的一种简单方法是S,例如reverse_copy(first, last, back_inserter(S)).

另请参阅

insert_iteratorfront_insert_iterator输出迭代器后插入序列序列迭代器概述
[Silicon Surf] [STL Home]
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。 商标信息