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" の箇所がスワップしています。