rotate関数は、その名の通り要素をローテートさせます
template_Firstから_Middle-1の範囲と_Middleから_Last-1 までの範囲を取り替えます。 ちょっとわかりにくいですね。void rotate( ForwardIterator _First, ForwardIterator _Middle, ForwardIterator _Last ); 
rotate(a, b, c);とあったら、aからb-1の範囲とbからc-1の範囲を取り替えます。 では、サンプルを見てみましょう。
// rotate01.cpp
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    vector<int> v;
    vector<int>::iterator pv;
    int i, a[10];
    for (i = 0; i < 10; i++)
        v.push_back(i);
    for (pv = v.begin(); pv != v.end(); pv++)
        cout << *pv << ", ";
    cout << endl;
    rotate(v.begin(), v.begin() + 3, v.end());
    for (pv = v.begin(); pv != v.end(); pv++)
        cout << *pv << ", ";
    cout << endl;
    pv = v.begin();
    rotate(pv + 3, pv + 5, pv + 6);
    for (pv = v.begin(); pv != v.end(); pv++)
        cout << *pv << ", ";
    cout << endl;
    for (i = 0; i < 10; i++)
        *(a + i) = i;
    for (i = 0; i < 10; i++)
        cout << *(a + i) << ", ";
    cout << endl;
    rotate(a + 2, a + 6, a + 8);
    for (i = 0; i < 10; i++)
        cout << *(a + i) << ", ";
    cout << endl;
    return 0;
}
結果は次のようになります。
どうして、このような結果になるか考えてみてください。
Update Oct/24/2005 By Y.Kumei