SGI

front_insert_iterator<FrontInsertionSequence>

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

描述

Front_insert_iterator是一个迭代器适配器,它充当一个输出迭代器:通过front_insert_iterator进行赋值会将一个对象插入到前插序列的第一个元素之前。[1] [2]

示例

list<int> L;
L.push_front(3);
front_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 2 1 0 3

定义

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

模板参数

参数 描述 默认值
FrontInsertionSequence 前插序列的类型,将要插入的值将被插入到该序列中。  

模型

输出迭代器。一个前插迭代器的值类型集合(如输出迭代器要求中所定义)包含一个单一的类型FrontInsertionSequence::value_type.

类型要求

模板参数FrontInsertionSequence必须是前插序列

公共基类

无。

成员

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

新成员。

这些成员在输出迭代器要求中没有定义,但特定于front_insert_iterator.
成员 描述
front_insert_iterator(FrontInsertionSequence& S) 构造一个front_insert_iterator,它在S.
template<class FrontInsertionSequence>
front_insert_iterator<FrontInsertionSequence>
front_inserter(FrontInsertionSequence& S);
的第一个元素之前插入对象。等效于front_insert_iterator<FrontInsertionSequence>(S)

. [4] 这是一个全局函数,而不是成员函数。

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

的大小。front_insert_iterator[2] 注意insert_iteratorfront_insert_iterator之间的区别。可能看起来与使用插入点为序列开头的front_insert_iterator相同。实际上,存在一个非常重要的区别:每次通过进行赋值都对应于在序列的第一个元素之前插入一个元素。如果你使用front_insert_iterator在序列开头插入元素,那么这些元素将按照它们被插入的顺序出现。然而,如果你使用

在序列开头插入元素,那么这些元素将按照它们被插入的逆序出现。front_insert_iterator[3] 注意如何通过进行赋值的实现方式。通常,一元operator*必须定义,以便它返回一个代理对象,其中代理对象定义operator=front_insert_iterator来执行插入操作。在本例中,为了简单起见,代理对象是本身。也就是说,*i进行赋值之间的区别。如果仅返回,那么它指向前插序列中的某个特定元素;表达式,并且等效于i = t

。但是,你不应该依赖这种行为。它是一个实现细节,并不保证在未来版本中保持不变。front_insert_iterator[4] 这个函数仅出于方便而存在:因为它是一个非成员函数,所以可以推断模板参数,并且不需要显式声明S的类型。例如,反转一个范围并将其插入到前插序列开头的一种简单方法是.

copy(first, last, front_inserter(S))

另请参阅
[Silicon Surf] [STL Home]
insert_iteratorback_insert_iterator输出迭代器序列前插序列迭代器概述 Copyright © 1999 Silicon Graphics, Inc. 保留所有权利。