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で使えないかな〜・・・使えるじゃん!」