Express раннее завершение с помощью алгоритмов STL - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь переписать некоторые циклы в моем коде как стандартные библиотечные функции. Следующий фрагмент, похоже, следует общей модели для раннего завершения, и мне интересно, как express это без явных циклов?

auto sum = 0;
for (const string& key : keys) {
    if (my_map.find(key) == my_map.end())
        return nullptr;

    sum += my_map[key];
}
return make_unique<int>(sum);

1 Ответ

2 голосов
/ 14 июля 2020

Вот один из возможных подходов: вычислить sum как побочный эффект алгоритма, который завершается раньше времени. например,

int sum = 0;
auto f = std::find_if(keys.begin(), keys.end(), [&](string const &key) {
                      if (my_map.find(key) == my_map.end())
                          return true;
                      sum += my_map[key];
});

return f == keys.end() ? make_unique(sum) : nullptr;
...