有什么方法可以根据条件反向或向前迭代向量吗?

问题描述 投票:0回答:1

我正在尝试执行以下操作:

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
元素?

c++ vector std
1个回答
0
投票

您必须创建一个新的模板化函数来进行迭代以处理不同的类型。您可以使用 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());
}
© www.soinside.com 2019 - 2024. All rights reserved.