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

时间:2016-12-12 05:21:27

标签: c++

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

我尝试使用三元运算符,但它不起作用

auto begin = reverse ? mPxSize::reverse_iterator :
                       mPxSize::iterator;

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

??? 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++ ) {

我是否可以使用标记为???的某个基础预先声明迭代器。或者是否有一种简单的方法可以在这里使用模板(我不太清楚,我承认)

1 个答案:

答案 0 :(得分: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());
  }
}

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