类别:迭代器,适配器 | 组件类型:类型 |
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
参数 | 描述 | 默认值 |
---|---|---|
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(FrontInsertionSequence& S) | 构造一个front_insert_iterator,它在S. |
template<class FrontInsertionSequence> front_insert_iterator<FrontInsertionSequence> front_inserter(FrontInsertionSequence& S); |
的第一个元素之前插入对象。等效于front_insert_iterator<FrontInsertionSequence>(S) |
注释[1] 注意通过FrontInsertionSequence::iterator进行赋值和通过front_insert_iterator<FrontInsertionSequence>进行赋值之间的区别。如果i[1] 注意通过是一个有效的,那么它指向前插序列中的某个特定元素;表达式*i = t用t替换该元素,并且不会改变序列中元素的总数。如果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的类型。例如,反转一个范围并将其插入到前插序列开头的一种简单方法是.