我试图在前向和后向迭代之间切换,而不必在迭代中复制代码。
我尝试使用三元运算符,但它不起作用
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++ ) {
我是否可以使用标记为???的某个基础预先声明迭代器。或者是否有一种简单的方法可以在这里使用模板(我不太清楚,我承认)
答案 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());
}
}
这个想法是将逻辑移动到由迭代器类型参数化的辅助函数中。然后可以使用正向或反向迭代器调用它。