我应该用什么STL容器来走树?

时间:2011-06-27 23:28:32

标签: c++ stl iterator

我不知道双向是否可以写rbegin()或者我是否可以减少迭代器。

我有一棵树只是前进的,这不是问题。我想走它。我现在正在做的是每次我访问分支机构时我都会推送current_iterator。现在的问题是我正在迭代一个分支并调用一个函数。该函数需要访问列表中的先前节点。

所以我写了it=current_iterator并打算写--it来回放。作为一个快速测试,我写了--o.begin()==o.end(),看看我是否能做到这一点。我收到了一个断言错误。

我正在使用双端队列。我可以使用哪个容器,允许我在迭代器上写=,在迭代过程中前进和后退?我似乎需要保留o的副本,以便我可以比较.begin().end()。什么是推荐的容器和技术?

1 个答案:

答案 0 :(得分:4)

Deque迭代器是随机访问的。你可以增加和减少它们。

问题可能是你试图减少begin返回的迭代器。这样做不能保证给你列表的结尾 - deques不是循环的。 (我认为这是未定义的行为,所以可以给你结束,但我怀疑任何实现都是这样做的。)

换句话说,你是否可以减少迭代器的测试不是一个有效的测试;你从中得出的结论是,你不能递减迭代器也是无效的。只要新位置也有效,您就可以减少任何有效的deque迭代器。