根据某些条件迭代几个已知范围之一的最有效方法是什么?
二进制条件的伪代码:
for element in (condition ? range_a : range_b)
// do work
这个“示例”显示了我使用基于范围的 for 循环的意图,但由于std::initializer_list
引用语义它不起作用。
constexpr auto some_range(bool c) -> std::initializer_list<int> {
if (c) {
return {1,2};
} else {
return {3, 4, 5};
}
}
bool cond = true; // false
for(auto x : some_range(cond)) {
// things
}
产量:warning: returning address of local temporary object [-Wreturn-stack-address]
在运行时我可以返回 astd::vector
但这将涉及每次调用都构造一个新向量:
auto some_range(bool c) -> std::vector<int> {
if (c) {
return {1,2};
} else {
return {3, 4, 5};
}
}
我可以使用固定大小std::array
,std::optional<int>
但我必须求助于 C++14 或 C++11 解决方案。