For-loop или std :: any_of, какой мне следует использовать? - PullRequest
0 голосов
/ 11 декабря 2019

Я не могу выбрать между для цикла и 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-loop может быть лучше, так как все должны быть знакомы с ним. Есть ли причина для использования any_of или это просто вопрос вкуса? Есть ли другие (лучшие) альтернативы? Заранее спасибо.

1 Ответ

4 голосов
/ 11 декабря 2019

Многие стандартные библиотечные функции C ++ (обычно те, что в <algorithm>) существуют для того, чтобы устранить необходимость в for или других конструкциях цикла. std::accumulate является ранним примером.

Поэтому предпочитайте std::any_of, а не цикл.

...