function template
<algorithm>

std::copy_backward

template <class BidirectionalIterator1, class BidirectionalIterator2>  BidirectionalIterator2 copy_backward (BidirectionalIterator1 first,                                        BidirectionalIterator1 last,                                        BidirectionalIterator2 result);
將序列的元素從末尾開始向後複製
將範圍 [first,last) 中的元素從末尾開始複製到以 result 結尾的範圍中。

該函式返回指向目標範圍第一個元素的迭代器。

結果範圍中的元素順序與 [first,last) 完全相同。要反轉它們的順序,請參閱 reverse_copy

該函式首先將 *(last-1) 複製到 *(result-1),然後依次向前複製前面的元素,直到 first(包括 first)。

範圍不應重疊,使得 result(即目標範圍的結束之後元素)指向範圍 (first,last] 中的某個元素。對於這種情況,請參閱 copy

此函式模板的行為等同於
1
2
3
4
5
6
7
8
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),它包含 firstlast 之間的所有元素,包括 first 指向的元素,但不包括 last 指向的元素。
result
雙向迭代器,指向目標序列的結束之後位置。
此位置不應指向範圍 (first,last] 中的任何元素。

返回值

指向目標序列中第一個已複製元素的迭代器。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 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


複雜度

線性時間複雜度,複雜度與 firstlast 之間的 距離 成正比:對範圍中的每個元素執行一次賦值操作。

資料競爭

範圍 [first,last) 中的物件將被訪問(每個物件恰好訪問一次)。
返回的指標與 result 之間的範圍中的物件將被修改(每個物件恰好被修改一次)。

異常

如果元素賦值或迭代器操作丟擲異常,則會丟擲異常。
請注意,無效引數會導致未定義行為

另見