簡體   English   中英

有沒有辦法轉換std :: stack <pointer> 到std :: stack <const pointer> ?

[英]Is there a way to convert a std::stack<pointer> to std::stack<const pointer>?

這是一些背景。 我有一個二叉樹迭代器(按順序排列)。 它通過將指針推入堆棧頂部來跟蹤其當前節點的父節點。 現在,我還需要互操作性 ,即將iteratorconst_iterator的能力。 但是iterator具有std::stack<pointer>const_iterator具有std::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中保留一個非const堆棧即可。 它是一個私有數據成員,因此並不重要。

確保您的const_iterator實現未通過指針進行修改。 再次確定,請始終使用const_iterator自己的運算符*(),該運算符應返回const引用。 (實際上,我認為您不需要過多地取消引用指針,但是如果您這樣做了,那就應該這樣做。)

在C ++中,沒有簡單的方法可以進行此類轉換。 看起來強制轉換就足夠了,但這種方式行不通。

C ++方式是隱藏關鍵的數據結構並管理不同API的訪問。 是的,這意味着在一個點上,你有較少的const比預期的。 但這就是隱藏的目的。 只要它僅在實現中,就沒有其他人可以濫用它。

你可以得到相當接近所需的解決方案,如果你封裝你堆/雙端隊列/不管[我猜vector將suffient]在一個專用的類。 在內部,它保留非const指針,但是所有const方法都返回const pointer s。 如果您的迭代器僅通過getter進行訪問,則應該不可能意外地繞過const

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM