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