在我的項目中,我使用std :: queue類。我想知道如果我做以下事情會發生什麼。如何在隊列中使用內存?
- 獲取隊列中某個元素的指針(注意:指針而不是迭代器)。
- 我做出像在隊列push和pop的隊列修改(彈出元件,其不是由以前的指針指向)
難道我的指針我在開始的時候指定相同的元素仍指向?它是由隊列規範定義的嗎?
在我的項目中,我使用std :: queue類。我想知道如果我做以下事情會發生什麼。如何在隊列中使用內存?
難道我的指針我在開始的時候指定相同的元素仍指向?它是由隊列規範定義的嗎?
std::queue
使用序列容器來實現它。默認情況下,使用std::deque
。對於std::deque
,只要所有插入和擦除位於容器的開始或結束處,對容器中元素的引用和指針都不會失效。
但是,我不知道你將如何得到一個指向隊列中的元素的指針;它沒有爲此提供功能(您只能獲得對隊列中第一個和最後一個元素的引用)。
改爲使用std :: deque。 std :: queue旨在防止用戶執行任何非隊列操作。
好的,但它並沒有真正回答我的問題。 (std ::隊列使用std :: dequeue)。如果我得到一個元素的引用(指針),並且如果我做了一個push/pop動作。該參考是否失效? – Phong 2010-07-20 07:41:56
對不起,我誤解了你的問題。指向默認隊列元素的迭代器或指針可能會在推送或彈出時失效。但是,你可以創建一個std :: queue
其實我必須爲我的庫C++使用std :: queue生成一個包裝器C.用戶希望能夠通過指針使用數據(他喜歡根據需要修改規範)。打算使用迭代器來獲取指向元素的指針,但沒有保險就沒關係或不... – Phong 2010-07-20 07:38:23
@Phong:'std :: queue'沒有迭代器。 – 2010-07-20 12:56:01
我的錯誤,你是對的。 – Phong 2010-07-21 00:42:01