copy_backward
|
|
类别:算法 |
组件类型:函数 |
原型
template <class BidirectionalIterator1, class BidirectionalIterator2>
BidirectionalIterator2 copy_backward(BidirectionalIterator1 first,
BidirectionalIterator1 last,
BidirectionalIterator2 result);
描述
Copy_backward将范围内的元素复制[first, last)到范围[result - (last - first), result) [1]。也就是说,它执行赋值操作*(result - 1) = *(last - 1), *(result - 2) = *(last - 2),依此类推。通常,对于每个整数n从0到last - first,
copy_backward执行赋值操作*(result - n - 1) = *(last - n - 1)。赋值操作从输入序列的末尾到开头执行,即按递增顺序执行n. [2]
返回值为result - (last - first)
定义
在标准头文件 algorithm 中定义,并在非标准向后兼容头文件 algo.h 中定义。类型要求
- BidirectionalIterator1 和 BidirectionalIterator2 是 BidirectionalIterator 的模型。
- BidirectionalIterator1 的值类型可转换为 BidirectionalIterator2 的值类型。
前提条件
-
[first, last)是一个有效的范围。
-
result不是范围内的迭代器[first, last).
- 有足够的空间容纳所有正在复制的元素。更正式地说,要求是[result - (last - first), result)是一个有效的范围。
复杂度
线性。正好last - first个赋值操作被执行。示例
vector<int> V(15);
iota(V.begin(), V.end(), 1);
copy_backward(V.begin(), V.begin() + 10, V.begin() + 15);
注释
[1]
结果是一个指向输出范围末尾的迭代器。这非常不寻常:在所有其他通过单个迭代器表示输出范围的 STL 算法中,该迭代器都指向范围的开头。
[2] 当输入和输出范围重叠时,赋值顺序很重要copy_backward如果result在范围内[first, last)。也就是说,如果输出范围的末尾与输入范围重叠,则不能使用它,但如果输出范围的开头与输入范围重叠,则可以使用它;copy具有相反的限制。如果这两个范围完全不重叠,当然,则可以使用任一算法。
另请参阅
copy, copy_n
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。
商标信息