这是一些背景。我有一个二叉树迭代器(按顺序说)。它通过将指针放在堆栈顶部来跟踪当前节点的父节点。现在我还想要互操作性,即能够将iterator
投射到const_iterator
。但iterator
有std::stack<pointer>
和const_iterator
有std::stack<const pointer>
。有没有办法将std :: stack <pointer>转换为std :: stack <const pointer>?
任何其他达到同样效果的方式也是值得赞赏的。
编辑
目前我已经放弃使用std::stack
完全的想法。我正在使用std::deque
和push_back()
+ pop_back()
+ back()
。对于将std::deque<pointer>
转换为std::deque<const pointer>
,我只是使用std::copy(std::begin(ptrDeque), std::end(ptrDeque), std::begin(constPtrDeque));
而此设置只是工作。
出于好奇,我仍然喜欢这个问题的答案。
如果转换有点复杂,你也可以使用'std :: transform'。在这种情况下,'std :: copy'很好。 – Naveen
而不是'std :: copy',你应该在deque上使用[范围形式的插入](http://en.cppreference.com/w/cpp/container/deque/insert)在一些CRT实现中它可以快得多。至于使用'deque'而不是'stack' - 默认情况下,它们是相同的底层数据结构。 'std :: stack'只是一个为其他容器提供堆栈语义的适配器;默认情况下通常是deque。 (我认为它也可能是矢量,但我不记得确切) –
@BillyONeal这是'deque' AFAIK。 – Hindol