template<class ForwardIterator1, class ForwardIterator2> ForwardIterator2 swap_ranges( ForwardIterator1 _First1, ForwardIterator1 _Last1, ForwardIterator2 _First2 );まずは、例題をみてみましょう。
// swapranges01.cpp #include <vector> #include <algorithm> #include <iostream> using namespace std; int main() { vector<int>v1, v2; vector<int>::iterator pv1, pv2; int i; for (i = 1; i <= 10; i++) v1.push_back(i); for (i = 0; i < 6; i++) v2.push_back(0); for (pv1 = v1.begin(); pv1 != v1.end(); pv1++) cout << *pv1 << ", "; cout << endl; for (pv2 = v2.begin(); pv2 != v2.end(); pv2++) cout << *pv2 << ", "; cout << endl; pv1 = v1.begin() + 2; swap_ranges(pv1, pv1 + 3, v2.begin()); for (pv1 = v1.begin(); pv1 != v1.end(); pv1++) cout << *pv1 << ", "; cout << endl; for (pv2 = v2.begin(); pv2 != v2.end(); pv2++) cout << *pv2 << ", "; cout << endl; return 0; }最初にv1,v2の要素を順番に表示しています。
次にv1の3番目の要素(v1.begin() + 2)から、3つだけv2の最初の3つの要素と 取り替えています。
では、次の例題をみてみましょう。
// swapranges02.cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<char *>v1, v2; int i; vector<char *>::iterator pv1, pv2; v1.push_back("abc"); v1.push_back("def"); v1.push_back("ghi"); v1.push_back("jkl"); for(i = 0; i < 5; i++) v2.push_back("0"); pv1 = v1.begin() + 1; swap_ranges(pv1, pv1 + 1, v2.begin() + 1); for (pv1 = v1.begin(); pv1 != v1.end(); pv1++) cout << *pv1 << ", "; cout << endl; for (pv2 = v2.begin(); pv2 != v2.end(); pv2++) cout << *pv2 << ", "; cout << endl; return 0; }v1,v2の要素は文字列です。
v1の2番目の要素から、1つだけv2の要素と取り替えます。しかも、v2の要素は 2番目からです。
Update Aug/16/2005 By Y.Kumei