c++ - 有没有办法将 std::stack<pointer> 转换为 std::stack<const pointer>?

标签 c++ stl iterator stack

这里是一些背景。我有一个二叉树迭代器(按顺序说)。它通过将指针推到堆栈顶部来跟踪其当前节点的父节点。现在我还想要互操作性,即转换 iterator 的能力至 const_iterator .但是iteratorstd::stack<pointer>const_iteratorstd::stack<const pointer> .

也欢迎任何其他实现相同效果的方法。

编辑

目前我已经放弃了使用 std::stack 的想法完全。我正在使用 std::dequepush_back() + pop_back() + back() .用于转换 std::deque<pointer>std::deque<const pointer> , 我正在使用 std::copy( std::begin(ptrDeque), std::end(ptrDeque), std::begin(constPtrDeque) );这个设置很简单

出于好奇,我仍然想要这个问题的答案。

最佳答案

只需在您的 const_iterator 中保留一个非常量堆栈。它是一个私有(private)数据成员,所以它并不重要。

确保您的 const_iterator 实现不会通过指针进行修改。为了双重确定,请始终使用您的 const_iterator 自己的 operator*() ,它应该返回一个 const 引用。 (实际上,我认为您不需要取消对指针的引用太多,但如果您这样做,那就是您应该这样做的方式。)

关于c++ - 有没有办法将 std::stack<pointer> 转换为 std::stack<const pointer>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12685045/

相关文章:

c++ - C++中的延迟实例化

c++ - 如何检查两个 std::vector 是否只包含相同的元素?

c++ - 使用较少位的无符号 qword(64 位)的值范围?

c++ - 矩阵相乘算法的问题(c++)

C++ 如何将数组 int[10] push_back 到 std::vector<int[10]>?

c++ - vector 迭代器不兼容

Python - 选择字典中的另一个元素

c++ - 如何使用 std::map 获取双向迭代器的索引?

c++ - 奇怪的行为 : memcpy faster 1x when src is not set value

c++ - 为什么 unique_lock 调用解锁,当他不拥有互斥量?