c++ foreach宏

本文介绍了C++中实现类似foreach的功能,通过自定义宏解决长迭代器问题,支持break、continue及嵌套循环。内容包括宏的原理、使用示例以及可能存在的问题。同时提到C++标准库的std::for_each与Boost库的BOOST_FOR_EACH宏,但建议使用轻量级的解决方案。
摘要由CSDN通过智能技术生成

现在很多语言都支持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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值