function template
<algorithm>

std::move_backward

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

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

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

該函式首先將 *(last-1) 移動到 *(result-1),然後向後移動這些元素,直到到達 first(包括 first)。

範圍不應以 result(目標範圍中的結束之後元素)指向 (first,last] 範圍內的元素的方式重疊。對於這種情況,請參閱 move

此函式模板的行為等同於
1
2
3
4
5
6
7
8
template<class BidirectionalIterator1, class BidirectionalIterator2>
  BidirectionalIterator2 move_backward ( BidirectionalIterator1 first,
                                         BidirectionalIterator1 last,
                                         BidirectionalIterator2 result )
{
  while (last!=first) *(--result) = std::move(*(--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
// move_backward example
#include <iostream>     // std::cout
#include <algorithm>    // std::move_backward
#include <string>       // std::string

int main () {
  std::string elems[10] = {"air","water","fire","earth"};

  // insert new element at the beginning:
  std::move_backward (elems,elems+4,elems+5);
  elems[0]="ether";

  std::cout << "elems contains:";
  for (int i=0; i<10; ++i)
    std::cout << " [" << elems[i] << "]";
  std::cout << '\n';

  return 0;
}

輸出
elems contains: [ether] [air] [water] [fire] [earth] [] [] [] [] []


複雜度

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

資料競爭

兩個範圍內的物件都會被修改。

異常

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

另見