函式模板
<algorithm>

std::swap_ranges

template <class ForwardIterator1, class ForwardIterator2>  ForwardIterator2 swap_ranges (ForwardIterator1 first1, ForwardIterator1 last1,                                ForwardIterator2 first2);
交換兩個範圍的值
將範圍 [first1,last1) 中每個元素的值與範圍 first2 開始的相應元素的值進行交換。

該函式呼叫 swap (未限定) 來交換元素。

此函式模板的行為等同於
1
2
3
4
5
6
7
8
9
10
template<class ForwardIterator1, class ForwardIterator2>
  ForwardIterator2 swap_ranges (ForwardIterator1 first1, ForwardIterator1 last1,
                                ForwardIterator2 first2)
{
  while (first1!=last1) {
    swap (*first1, *first2);
    ++first1; ++first2;
  }
  return first2;
}

引數

first1, last1
用於交換的序列之一的起始和結束位置的正向迭代器。所使用的範圍是 [first1,last1),它包含 first1last1 之間的所有元素,包括 first1 指向的元素,但不包括 last1 指向的元素。
first2
用於交換的另一個序列的起始位置的正向迭代器。所使用的範圍包含的元素數量與範圍 [first1,last1) 相同。
兩個範圍不得重疊。

這兩個範圍不得重疊。
swap 應定義為對稱地(雙向)交換兩個迭代器型別指向的物件。

返回值

第二個序列中最後一個被交換元素的迭代器。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// swap_ranges example
#include <iostream>     // std::cout
#include <algorithm>    // std::swap_ranges
#include <vector>       // std::vector

int main () {
  std::vector<int> foo (5,10);        // foo: 10 10 10 10 10
  std::vector<int> bar (5,33);        // bar: 33 33 33 33 33

  std::swap_ranges(foo.begin()+1, foo.end()-1, bar.begin());

  // print out results of swap:
  std::cout << "foo contains:";
  for (std::vector<int>::iterator it=foo.begin(); it!=foo.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  std::cout << "bar contains:";
  for (std::vector<int>::iterator it=bar.begin(); it!=bar.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

輸出
foo contains: 10 33 33 33 10
bar contains: 10 10 10 33 33


複雜度

線性的,與 firstlast 之間的距離成比例:對範圍內的每個元素執行交換操作。

資料競爭

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

異常

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

另見