我有一个名为foo
的std::vector<boost::optional<double>>
。在这种特定情况下,我需要一个std::vector<double>
,其中来自另一个向量的任何“可选”元素都映射到新向量中的0。
我是否遗漏了一个一行代码的解决方案?
另一种选择是令人不满意的。
std::vector<double> out(foo.size());
for (auto& it : foo){
out.push_back(it ? *it : 0.0);
}
我希望能够使用基于std::optional
的解决方案,尽管我尚未使用该标准。
std::transform
。以及boost::optional::value_or
。 - Jarod42auto out = foo | ranges::view::transform([](const auto& o) { return o.value_or(0.0); });
。这行代码将foo
中的每个元素转换为value_or(0.0)
的值,并赋给out
变量。 - Jarod42