第99章 rotateアルゴリズム関数を使う


rotate関数は、その名の通り要素をローテートさせます



template
   void rotate(
      ForwardIterator _First, 
      ForwardIterator _Middle, 
      ForwardIterator _Last
   );
_Firstから_Middle-1の範囲と_Middleから_Last-1 までの範囲を取り替えます。 ちょっとわかりにくいですね。
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;
}
結果は次のようになります。



どうして、このような結果になるか考えてみてください。


[C++Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Oct/24/2005 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。