C++ 我应该使用什么STL容器在树上行走?

C++ 我应该使用什么STL容器在树上行走?,c++,stl,iterator,C++,Stl,Iterator,我不知道双向是否意味着可以编写rbegin(),或者是否可以减少迭代器 我有一棵只向前的树,这不是问题。我想步行去,这是我的梦想。我现在正在做的是每次访问分支时,我都会推当前的迭代器。现在的问题是我正在迭代一个分支并调用一个函数。函数需要访问列表中以前的节点 所以我写了it=current\u迭代器,并计划写——它倒带。作为一个快速测试,我写了--o.begin()==o.end(),看看我是否能做到这一点。我犯了一个断言错误 我用的是德克牌。我可以用哪一个容器来在一个中介器上写=/COD>,在

我不知道双向是否意味着可以编写rbegin(),或者是否可以减少迭代器

我有一棵只向前的树,这不是问题。我想步行去,这是我的梦想。我现在正在做的是每次访问分支时,我都会推当前的迭代器。现在的问题是我正在迭代一个分支并调用一个函数。函数需要访问列表中以前的节点

所以我写了
it=current\u迭代器
,并计划写
——它
倒带。作为一个快速测试,我写了
--o.begin()==o.end()
,看看我是否能做到这一点。我犯了一个断言错误


我用的是德克牌。我可以用哪一个容器来在一个中介器上写<代码>=/COD>,在迭代过程中向前和向后?似乎我还需要保留一份
o
的副本,以便比较
.begin()
.end()
。推荐的容器和技术是什么?

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

问题可能是您试图减少
begin
返回的迭代器。这样做并不能保证给你列表的末尾——deques不是循环的。(我认为这是一种未定义的行为,因此它可能会给您带来结果,但我怀疑是否有任何实现真的会这样做。)


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

使用典型的迭代器语义,-o.begin()不应等同于o.end()。o、 end()表示迭代结束后的值。根据实现的不同--o.rbegin()可能与o.end()相同,反之--o.begin()可能是o.rend()。实际上,测试是检查begin之前的一个是否与过去的一个相同。事实并非如此。所以我想知道如何检查迭代器的边界。我想最好的方法是保留begin()的一个副本,并在减量之前进行比较-编辑-没有其他迭代器更适合吗?(但也许同样好)这是正确的。如果您已经处于序列的开始(或结束),请不要再继续。比较是否相等:
if(it==o.begin())
。如果要插入或删除项,请注意有关迭代器无效的规则。