swap_ranges関数は、ある範囲の要素を、他の要素と入れ替えます。
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