std::
copy_backward
函数模板 <algorithm>
template <class BidirectionalIterator1, class BidirectionalIterator2>
BidirectionalIterator2 copy_backward (BidirectionalIterator1 first,
BidirectionalIterator1 last,
BidirectionalIterator2 result); |
从末尾复制范围的元素
将从end开始的[first,last)范围内的元素复制到以result结束的范围内。
该函数返回目标范围内第一个元素的迭代器。
结果范围中的元素的顺序与 [first,last)完全相同。如果要反转它们的顺序,请参见reverse_copy。
该函数首先将*(last-1)复制到*(result-1)中,然后依次向前,直到到达first(并包括它)。
范围不应这样重叠,即result(即目标范围中的past-the-end元素)
指向范围 (first,last]中的一个元素。此类情况见 copy。
这个函数模板的行为相当于:
template<class BidirectionalIterator1, class BidirectionalIterator2>
BidirectionalIterator2 copy_backward ( BidirectionalIterator1 first,
BidirectionalIterator1 last,
BidirectionalIterator2 result )
{
while (last!=first) *(--result) = *(--last);
return result;
} |
☲ 参数
-
first, last
-
指向一个将要 复制序列初始和最终位置的双向迭代器。使用的范围是[first,last),
它包含first和last之间的所有元素,包括first指向的元素,但不包括last指向的元素。
-
result
-
指向目标序列中的结束后位置的双向迭代器。
这将不会指向范围(first,last]中的任何元素。
☉ 返回值
指向目标序列中已复制元素的第一个元素的迭代器。
☣ 示例
// copy_backward example
#include <iostream> // std::cout
#include <algorithm> // std::copy_backward
#include <vector> // std::vector
int main () {
std::vector<int> myvector;
// set some values:
for (int i=1; i<=5; i++)
myvector.push_back(i*10); // myvector: 10 20 30 40 50
myvector.resize(myvector.size()+3); // allocate space for 3 more elements
std::copy_backward ( myvector.begin(), myvector.begin()+5, myvector.end() );
std::cout << "myvector contains:";
for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
} |
输出:
myvector contains: 10 20 30 10 20 30 40 50
✥ 复杂度
first and last之间的距离是线性的:对范围内的每个元素执行赋值操作。
⇄ 数据竞争
访问[first,last]范围内的对象(每个对象只访问一次)。
result和返回值之间的对象被修改(每个对象只修改一次)。
☂ 异常安全性
如果迭代器上的元素赋值或操作抛出,则抛出。
注意,无效的参数会导致未定义的行为。
🍄 另请参阅
reverse_copy |
复制并反转元素(函数模板) |
copy |
复制范围的元素(函数模板) |
fill |
在范围内查找值(函数模板) |
replace |
从设置的范围查找元素(函数模板) |