我试图在前向和后向迭代之间切换,而不必在迭代中复制代码.
我尝试使用三元运算符,但它没有用
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)
我可以预先使用一些基数来预先设置迭代器吗?或者是否有一种简单的方法可以在这里使用模板(我不太清楚,我承认)
以下是使用模板执行此操作的一种方法:
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)
我们的想法是将逻辑移动到由迭代器类型参数化的辅助函数中.然后可以使用正向或反向迭代器调用它.