我有一个动画类,它将帧存储在std :: list中,头文件声明了一个迭代器,我使用time来增加迭代器。我的动画工作正常,直到我尝试反转动画(从当前位置),我不能减少迭代器(双向哼?)。我也考虑过存储反向迭代器,但是找不到在两者之间切换的好方法。
如何在前向迭代和反向迭代之间无缝切换(无需从std :: list的开头开始)。
答案 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;
}