我正在尝试执行以下操作:
const bool b_condition = false;
const auto begin = b_condition ? arr.cbegin() : arr.crbegin();
//Will likely be different than arr.size(). Simplified here for example
const int size = arr.size();
std::for_each_n(begin, size, [](const Data& d) {
//print d
});
我必须打印向量的最后一个或第一个
size
元素。是最后一个还是第一个取决于b_condition
。此代码: const auto begin = b_condition ? arr.cbegin() : arr.crbegin();
当然不起作用,因为 const_reverse_iterator
和 const_iterator
是不同的类型,并且只能将一种类型存储在变量中。
经过一些研究,似乎没有迭代器的通用基类,所以我不能使用它。此外,我知道使用普通(非标准)for 循环非常容易做到这一点,但我想看看是否可以使用标准库来完成此任务,所以我更喜欢基于标准的答案。
有没有办法根据 std::algorithms 的条件迭代最后一个或第一个
size
元素?
您必须创建一个新的模板化函数来进行迭代以处理不同的类型。您可以使用 lambda 稍微简化一下:
const bool b_condition = false;
const int size = arr.size();
auto iterate = [&](auto begin) {
std::for_each_n(begin, size, [](const Data& d) {
//print d
});
};
if (b_condition)
{
iterate(arr.cbegin());
}
else
{
iterate(arr.crbegin());
}