使用 STL 算法快速提前终止
Express early termination with STL algorithms
我正在尝试将代码中的一些循环重写为标准库函数。以下代码段似乎遵循提前终止的一般模型,我想知道如何在没有显式循环的情况下表达它?
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);
这是一种可能的方法:将 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;
我正在尝试将代码中的一些循环重写为标准库函数。以下代码段似乎遵循提前终止的一般模型,我想知道如何在没有显式循环的情况下表达它?
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);
这是一种可能的方法:将 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;