c ++在正向和反向迭代之间切换

chr*_*ise 3 c++

我试图在前向和后向迭代之间切换,而不必在迭代中复制代码.

我尝试使用三元运算符,但它没有用

auto begin = reverse ? mPxSize::reverse_iterator :
                       mPxSize::iterator;
Run Code Online (Sandbox Code Playgroud)

(这是我的理解,它不喜欢不同的类型),所以我想知道是否有迭代器的基本版本我可以声明以下将工作

??? begin;
??? end;

if (reverse) {
    mPxSize::reverse_iterator begin = m_levels.rbegin();
    mPxSize::reverse_iterator end = m_levels.rbegin();
} else {
    mPxSize::const_iterator begin = m_levels.begin();
    mPxSize::const_iterator end = m_levels.begin();
}

for ( it = begin; it != end; it++ ) {
Run Code Online (Sandbox Code Playgroud)

我可以预先使用一些基数来预先设置迭代器吗?或者是否有一种简单的方法可以在这里使用模板(我不太清楚,我承认)

NPE*_*NPE 5

以下是使用模板执行此操作的一种方法:

template<typename It>
void foo(It begin, It end) {
  for (It it = begin; it != end; ++it) {
    // ...
  }
}

void bar(std::vector<int>& m_levels, bool reverse) {
  if (reverse) {
    foo(m_levels.rbegin(), m_levels.rend());
  } else {
    foo(m_levels.begin(), m_levels.end());
  }
}
Run Code Online (Sandbox Code Playgroud)

我们的想法是将逻辑移动到由迭代器类型参数化的辅助函数中.然后可以使用正向或反向迭代器调用它.