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

时间:2011-10-18 10:53:06

标签: c++ list iterator reverse

我有一个动画类,它将帧存储在std :: list中,头文件声明了一个迭代器,我使用time来增加迭代器。我的动画工作正常,直到我尝试反转动画(从当前位置),我不能减少迭代器(双向哼?)。我也考虑过存储反向迭代器,但是找不到在两者之间切换的好方法。

如何在前向迭代和反向迭代之间无缝切换(无需从std :: list的开头开始)。

2 个答案:

答案 0 :(得分:1)

你应该能够减少列表迭代器;没有看到你的代码,以及它产生的错误,我无法猜出那里出了什么问题。

但是,将动画表示为通用迭代器范围可能更方便:

template <typename ForwardIterator>
void animate(ForwardIterator start, ForwardIterator end)
{
    for (; start != end; ++start) {
        start->display();
    }
}

std::vector<frame> animation = ...;
animate(animation.begin(), animation.end());   // play forwards
animate(animation.rbegin(), animation.rend()); // play backwards

答案 1 :(得分:0)

你是什么意思“我不能减少迭代器”?

在我的Visual C ++ 2010上,这可行:

std::list<int> l;
l.push_back(1);
l.push_back(2);
l.push_back(3);

auto i = l.end();
while (i != l.begin()) {
    --i;
    std::cout << *i << std::endl;
}