gpt4 book ai didi

c++ - 如何停止 for_each() 循环的迭代?对于(:) is not a viable option

转载 作者:太空狗 更新时间:2023-10-29 20:42:07 27 4
gpt4 key购买 nike

我喜欢 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com