假设我有一个函数可以查找并返回矢量的最小元素。如果向量是空的,它应该返回一个空的可选对象。有没有办法让我使用optional<T>
构造函数来避免使用if语句或三元运算符?如何在没有if语句的情况下返回可选的<T>?
随着if语句:
optional<Foo> GetMinElement(vector<Foo> foos) {
vector<Foo>::iterator min_foo = std::min_element(foos.begin(), foos.end());
bool found_min_element = (min_foo != foos.end());
if (found_min_element) {
return *min_foo;
} else {
return nullopt;
}
}
随着三元运算符:
optional<Foo> GetMinElement(vector<Foo> foos) {
vector<Foo>::iterator min_foo = std::min_element(foos.begin(), foos.end());
bool found_min_element = (min_foo != foos.end());
return found_min_element ? optional<Foo>(*min_foo) : optional<Foo>(nullopt);
}
天真,我只是希望能够给stl
算法的输出传递到optional<T>
构造和有它处理检查空指针的逻辑。有没有一些成语呢?
单看迭代器就不能确定它是否可解引用。这本身是必要的,但并不足够:算法可能已被调用超过'(someContainer.begin(),someContainer.end())'范围以外的范围。鉴于此,不涉及调用代码明确检查“找到算法的算法”的解决方案似乎不太可能。 –