Переключение между итерацией вперед и назад - PullRequest
0 голосов
/ 18 октября 2011

У меня есть класс анимации, который хранит кадры в std :: list, заголовочный файл объявляет итератор, я увеличиваю итератор, используя время.Мои анимации работают нормально, пока я не попытаюсь повернуть анимацию (с текущей позиции), я не могу уменьшить итератор (двунаправленный, да?).Я тоже думал о хранении обратного итератора, но не могу найти хороший способ переключения между ними.

Как я могу плавно переключаться между прямой итерацией и обратной итерацией (не начиная с начала std::список).

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Вы должны иметь возможность уменьшить итератор списка; не видя ваш код и ошибку, которую он выдает, я не могу догадаться, что там происходит не так.

Однако было бы удобнее представить анимацию в виде общего диапазона итератора:

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
0 голосов
/ 18 октября 2011

Что значит "я не могу уменьшить итератор"?

На моем 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;
}
...