现在很多语言都支持foreach关键字,虽然看起来完全可以用for来实现完全一样的功能,但是foreach使用起来却更方便。
下面是C++中的一个循环(很多情况下,我们都是在一个迭代器范围内进行循环)
for (iterator iter = _First; iter = _End; ++ iter)
{
*iter = some_value;
}
如果但从这个简单例子来看,foreach的意义不大。但是
1)很多时候上式中的iterator很长,比如:std::vector<std::vector<std::string> >::iteator。写起来非常麻烦,虽然我们可以typedef,但是过几天你就忘记对应的typedef名字了。
2)因为iterator的类型是对应容器的,所以换个容器,比如原先是std::vector<std::string>,现在改称std::list<std::string>,所有的循环的iterator都要改。而且从循环本身来讲,他应该只是关注数据类型本身,而不是存储数据的容器类型。
要实现一个foreach最重要的就是如果通过一个不知道类型的迭代器来获取其对应的数据类型;C++的新标准添加了typeof关键字,解决了这个问题,但是现在大家基本上都使用的是老的C++标准来开发……
标准库提供了一个std::for_each(transform)函数,可以很方便的遍利。但是需要提供一个额外的funct