作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我喜欢 for_each()
语法,但是当满足条件时从语法中转义是不可能的(我可以抛出异常,但这似乎有点过分了)。
我用过 find_if()
来做到这一点,但我有一个经理觉得以这种方式使用它有点晦涩。
我使用的是 MSVS2010,所以 for(:)
不可用。
我唯一的选择是做 for(auto i = container.begin(); i != container.end();++i)
吗?
最佳答案
我建议使用 BOOST_FOREACH
,这只是一个 header BTW,因此您甚至不必构建和链接即可提升。
#include <string>
#include <iostream>
#include <boost/foreach.hpp>
int main()
{
std::string hello( "Hello, world!" );
BOOST_FOREACH( char ch, hello )
{
std::cout << ch;
if(ch == 'o')break;
}
return 0;
}
如果 boost 不是一个选项,就像你说的那样使用普通的 for 循环
for(auto i = container.begin(); i != container.end(); ++i)
没什么大不了的:),或者你可以升级你的编译器。如果没有看到手头的问题和您的代码,我们无法判断 find_if
是否模糊。
这是我的 for_each 版本,不要相信它 100% boost 很长而且我确信我的版本有细微差别,因为它太短了(还会将名称泄漏到您的空间中,IDT boost 会这样做)< strong>这是我第三次尝试这样做,除了泄露的变量名 obscure_variable_name
之外,我很确定它是完全正确的。
#include <string>
#include <iostream>
#include <iterator>
#define AARON_FOREACH(var,container) \
if(int obscure_variable_name = 0) {} else \
for(auto var = *std::begin(container);obscure_variable_name+1;obscure_variable_name=-1) \
for(auto iter = std::begin(container); \
iter != std::end(container)?( var = *iter), true : false ; ++iter)
int main()
{
std::string hello( "Hello, world!" );
AARON_FOREACH(ch,hello)
{
std::cout << ch;
}
std::cout<<std::endl;
AARON_FOREACH(ch,hello)
{
std::cout << ch;
if(ch == 'o')break;
}
return 0;
}
关于c++ - 如何停止 for_each() 循环的迭代?对于(:) is not a viable option,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19870613/
我是一名优秀的程序员,十分优秀!