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

标签 c++ c++11 visual-studio-2010

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

相关文章:

c++ - 一个 lambda 从本质上来说,关闭自己是否有效?

c++ - 多重延续链接 : boost. future 展开。怎么做

c++ - 使用扩展 POSIX 语法的 C 正则表达式与 C++ 正则表达式中的不同行为

visual-studio-2010 - 如何通过 nuget powershell 脚本重新加载 Visual Studio 项目

c++ - {fmt} : Compile-time string format check doesn't work

c++ - 如何定义自定义文字?

c++ - 复数和朴素傅立叶变换 (C++)

c++ - 是否有在 Openg GL 中使用混合的 glCopyImageSubData 版本?

c# - 为什么 Visual Studio 在异常期间引用了错误的行?

c++ - 什么 VS2010 C 项目设置导致 exes 需要兼容模式