Boost.Foreach
Chapter 7. Boost.Foreach - 1.47.0
マクロで定義されたforeach。
(C+11でRange-based for loopがサポートされたので必要なくなっちゃいましたね)
配列、STLコンテナ、std::pairイテレータ、Null-terminated string(char and wchar_t)を回せる。
※ただし、マクロなので型に,が含まれてるとダメ
外に出すか、typedefする
boost_foreach_TEST.cpp
#include<iostream> #include<vector> #include<map> #include<string> #include<algorithm> #include<boost/foreach.hpp> int main(){ int a[] = { 0, 2, 4, 6, 8 }; int size = sizeof(a)/sizeof(a[0]); std::vector<int> b(a,a+size); std::map<std::string, std::string> MS; MS["MS-06FZ"] = "ザクII改"; MS["MS-18E"] = " ケンプファー"; MS["MSM-03C"] = "ハイゴッグ"; std::cout<<"a = "; BOOST_FOREACH(int e, a){ std::cout<< e << " "; } std::cout << std::endl; std::cout<<"b = "; BOOST_FOREACH(int e, b) std::cout<< e << " "; std::cout << std::endl; std::cout << "MS" <<std::endl; //マクロなので型に,が含まれてるとダメ //BOOST_FOREACH(std::pair<std::string, std::string> e, MS) std::cout << e.first <<" "<<e.second <<std::endl; std::pair<std::string, std::string> ele; BOOST_FOREACH(ele, MS) std::cout<<ele.first <<" "<<ele.second <<std::endl; std::cout << "typedefしてもおk"<<std::endl; typedef std::pair<std::string, std::string> e_t; BOOST_FOREACH(e_t e, MS) std::cout << e.first <<" "<<e.second <<std::endl; return 0; }
結果
a = 0 2 4 6 8 b = 0 2 4 6 8 MS MS-06FZ ザクII改 MS-18E ケンプファー MSM-03C ハイゴッグ typedefしてもおk MS-06FZ ザクII改 MS-18E ケンプファー MSM-03C ハイゴッグ