首页 > 解决方案 > For-loop 或 std::any_of,我应该使用哪一个?

问题描述

我无法在for 循环std::any_of之间做出决定,例如:

QString fileName = "Whatever";  // might contain a key-string which is part of sMyStringlist()
auto anyTypeContains = [&](const QString& categoryStr)
{
    for(auto const &keyStr : sMyStringlist()[categoryStr])
        if(fileName.contains(keyStr, Qt::CaseInsensitive))
            return true;
    return false;
};
if(anyTypeContains("myCategory"))
...

或者

QString fileName = "Whatever";  // might contain a key-string which is part of sMyStringlist()
auto anyTypeContains = [&](const QString& categoryStr)
{
    return std::any_of(
                sMyStringlist()[categoryStr].begin(),
                sMyStringlist()[categoryStr].end(),
                [&](const QString& keyStr){
        return fileName.contains(keyStr, Qt::CaseInsensitive);
    });
};
if(anyTypeContains("myCategory"))
...

我认为for 循环可能会更好,因为每个人都应该熟悉它。有什么理由使用any_of还是只是口味问题?还有其他(更好的)选择吗?提前致谢。

标签: c++c++11for-loopstlidioms

解决方案


许多 C++ 标准库函数(通常是 中的函数<algorithm>)是为了避免需要for或其他循环构造。std::accumulate是一个早期的例子。

因此更喜欢std::any_of而不是循环。


推荐阅读