copy_backward
将一个源范围中的元素值分配到目标范围,循环访问元素的源序列并将它们分配在一个向后方向的新位置。
template<class BidirectionalIterator1, class BidirectionalIterator2>
BidirectionalIterator2 copy_backward(
BidirectionalIterator1 _First,
BidirectionalIterator1 _Last,
BidirectionalIterator2 _DestEnd
);
参数
_First
一种双向迭代器,用于定址源范围内第一个元素的位置。_Last
一种双向迭代器,用于定址源范围内最后元素之后下一个元素的位置。_DestEnd
一种双向迭代器,用于定址目标范围内最后元素之后下一个元素的位置。
返回值
一种输出迭代器,用于定址目标范围内最后元素之后下一个元素的位置,也就是说,此迭代器用于定址 _DestEnd – (_Last – _First )。
备注
源范围必须有效,且必须具有足够的空间来保存所有要复制的元素。
copy_backward 算法的要求比 copy 算法更加严格。 它的输入和输出迭代器都必须是双向的。
在标准模板库算法中,仅 copy_backward 和 move_backward 算法使用指向目标范围末尾的迭代器来指定输出范围。
因为此算法会从最后一个元素开始按顺序复制源元素,所以,只要源范围的 _First 位置未包含在目标范围中,目标范围便可能与源范围重叠。 copy_backward 可用来将元素移动到右侧,但不能移动到左侧,除非源范围和目标范围之间不存在重叠。 若要向左移动任意数量的位置,请使用 copy 算法。
copy_backward 算法只修改由迭代器指向的值,并为目标范围内的元素赋予新值。 它不能用来创建新元素,也无法直接将元素插入到空容器。
示例
// alg_copy_bkwd.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
using namespace std;
vector <int> v1, v2;
vector <int>::iterator Iter1, Iter2;
int i;
for ( i = 0 ; i <= 5 ; ++i )
v1.push_back( 10 * i );
int ii;
for ( ii = 0 ; ii <= 10 ; ++ii )
v2.push_back( 3 * ii );
cout << "v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; ++Iter1 )
cout << *Iter1 << " ";
cout << ")" << endl;
cout << "v2 = ( " ;
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; ++Iter2 )
cout << *Iter2 << " ";
cout << ")" << endl;
// To copy_backward the first 3 elements of v1 into the middle of v2
copy_backward( v1.begin( ), v1.begin( ) + 3, v2.begin( ) + 7 );
cout << "v2 with v1 insert = ( " ;
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; ++Iter2 )
cout << *Iter2 << " ";
cout << ")" << endl;
// To shift the elements inserted into v2 two positions
// to the right
copy_backward( v2.begin( )+4, v2.begin( ) + 7, v2.begin( ) + 9 );
cout << "v2 with shifted insert = ( " ;
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; ++Iter2 )
cout << *Iter2 << " ";
cout << ")" << endl;
}
输出
v1 = ( 0 10 20 30 40 50 )
v2 = ( 0 3 6 9 12 15 18 21 24 27 30 )
v2 with v1 insert = ( 0 3 6 9 0 10 20 21 24 27 30 )
v2 with shifted insert = ( 0 3 6 9 0 10 0 10 20 27 30 )
要求
标头:<algorithm>
命名空间: std