int test_iterator_20() { // std::reverse_iterator: 反向迭代器 std::vector<int> myvector; for (int i = 0; i<10; i++) myvector.push_back(i); typedef std::vector<int>::iterator iter_type; // ? 0 1 2 3 4 5 6 7 8 9 ? iter_type from(myvector.begin()); // ^ // ------> iter_type until(myvector.end()); // ^ // std::reverse_iterator<iter_type> rev_until(from); // ^ // <------ std::reverse_iterator<iter_type> rev_from(until); // ^ std::cout << "myvector:"; while (rev_from != rev_until) std::cout << ' ' << *rev_from++; // 9 8 7 6 5 4 3 2 1 0 std::cout << '\n'; return 0; }
void GameStateManager::cleanup() { //unwind state stack in reverse typedef std::vector<State*>::iterator iter_type; iter_type from(gameStates.begin()); iter_type until(gameStates.end()); std::reverse_iterator<iter_type> rev_until(from); std::reverse_iterator<iter_type> rev_from(until); while (rev_from != rev_until) { delete *rev_from++; } for (auto& state : hangingStates) { delete state; state = nullptr; } //remove all state pointers gameStates.clear(); hangingStates.clear(); }