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