for each

東方算程譚 - うっそぉ〜ん!


VC++8.0以降の独自言語拡張でfor eachがあります

これはC#のforeachと同様の走査ができます


for eachがC++/CLI(/clrオプション)のみの
機能だと思っている人が多かったようですが、実は/clrオプションを使う必要はありません


NativeなSTLのコンテナにも適用できます


STLのコンテナ

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> v;

    v.push_back(3);
    v.push_back(1);
    v.push_back(4);

    for each (int value in v) {
        cout << value << endl;
    }

    return 0;
}


・自作コンテナ(boost::arrayと同じ固定長配列クラスだと思ってください。そのうちソース公開します)

#include <iostream>
#include <vector>

#include <shand/array.hpp>

using namespace std;
using namespace shand;

int main()
{
    array<int, 3> ar = {3, 1, 4};

    for each (int value in ar) {
        cout << value << endl;
    }

    return 0;
}


・組み込み配列(VC++9.0以降)

#include <iostream>

using namespace std;

int main()
{
    int ar[] = {3, 1, 4};

    for each (int value in ar) {
        cout << value << endl;
    }

    return 0;
}


VC++8.0では、const_iteratorとbegin(), end()を持ってるコンテナならfor eachできるようです



for each (int& vallue in v)
のような参照やポインタは使えないので、読み取り専用です(C++0xの拡張for文なら参照可)






とっても便利なんですよねー


私はC++/CLIを初めて触った日から知ってたんですが
意外と知られてなかったんですね
(まさかεπιστημηさんが知らなかったとは・・・)



【発見した経緯】
「for each便利だなー、STLで使えないかな〜・・・使えるじゃん!」