我有一个'foreach'宏我经常在C++中使用,适用于大多数STL容器:
#define foreach(var, container) \ for(typeof((container).begin()) var = (container).begin(); \ var != (container).end(); \ ++var)
(注意'typeof'是gcc扩展名.)它的使用方式如下:
std::vector< Blorgus > blorgi = ...; foreach(blorgus, blorgi) { blorgus->draw(); }
我想做一些类似迭代地图值的东西.也许称之为"foreach_value".所以不要写作
foreach(pair, mymap) { pair->second->foo(); }
我会写的
foreach_value(v, mymap) { v.foo(); }
我不能想出一个会这样做的宏,因为它需要声明两个变量:迭代器和值变量(上面的'v').我不知道如何在for循环的初始化器中做到这一点,即使使用gcc扩展.我可以在foreach_value调用之前声明它,但是它会与同一范围内的foreach_value宏的其他实例冲突.如果我可以将当前行号后缀为迭代器变量名,它可以工作,但我不知道该怎么做.
您将寻找BOOST_FOREACH - 他们已经为您完成了所有工作!
如果你想要自己动手,可以在C++的任何地方声明一个块,这可以解决你的中间存储器itr-> second的范围问题......
// Valid C++ code (which does nothing useful) { int a = 21; // Which could be storage of your value type } // a out of scope here { int a = 32; // Does not conflict with a above }