swap_ranges

シーケンス内の指定した範囲を交換します。

swap は内容全体を交換したわけですが、 swap_ranges では交換する範囲を指定できます。

swap_ranges のサンプルコード

最初の vector ではスワップ範囲の開始と終わりを指定しています。これでスワップサイズが決まるので、 もうひとつの vector ではスワップ開始点のみを指定します。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
  vector<char> v1, v2;
  vector<char>::iterator i;

  for (int j = 0; j < 20; j++) {
    v1.push_back('a' + j);
  }

  for (int j = 0; j < 20; j++) {
    v2.push_back('A' + j);
  }

  i = v1.begin();
  while (i != v1.end()) {
    cout << *i;
    ++i;
  }
  cout << endl;

  i = v2.begin();
  while (i != v2.end()) {
    cout << *i;
    ++i;
  }
  cout << endl;

  swap_ranges(v1.begin() + 3, v1.begin() + 8, v2.begin() + 10);

  i = v1.begin();
  while (i != v1.end()) {
    cout << *i;
    ++i;
  }
  cout << endl;

  i = v2.begin();
  while (i != v2.end()) {
    cout << *i;
    ++i;
  }
  cout << endl;

  return 0;
}

この実行結果は次のようになりました。

./a.out
abcdefghijklmnopqrst
ABCDEFGHIJKLMNOPQRST
abcKLMNOijklmnopqrst
ABCDEFGHIJdefghPQRST

”KLMNO" の箇所と "defgh" の箇所がスワップしています。