2010-07-20 44 views
0

在我的項目中,我使用std :: queue類。我想知道如果我做以下事情會發生什麼。如何在隊列中使用內存?

  • 獲取隊列中某個元素的指針(注意:指針而不是迭代器)。
  • 我做出像在隊列push和pop的隊列修改(彈出元件,其不是由以前的指針指向)

難道我的指針我在開始的時候指定相同的元素仍指向?它是由隊列規範定義的嗎?

回答

1

std::queue使用序列容器來實現它。默認情況下,使用std::deque。對於std::deque,只要所有插入和擦除位於容器的開始或結束處,對容器中元素的引用和指針都不會失效。

但是,我不知道你將如何得到一個指向隊列中的元素的指針;它沒有爲此提供功能(您只能獲得對隊列中第一個和最後一個元素的引用)。

+0

其實我必須爲我的庫C++使用std :: queue生成一個包裝器C.用戶希望能夠通過指針使用數據(他喜歡根據需要修改規範)。打算使用迭代器來獲取指向元素的指針,但沒有保險就沒關係或不... – Phong 2010-07-20 07:38:23

+0

@Phong:'std :: queue'沒有迭代器。 – 2010-07-20 12:56:01

+0

我的錯誤,你是對的。 – Phong 2010-07-21 00:42:01

1

改爲使用std :: deque。 std :: queue旨在防止用戶執行任何非隊列操作。

+0

好的,但它並沒有真正回答我的問題。 (std ::隊列使用std :: dequeue)。如果我得到一個元素的引用(指針),並且如果我做了一個push/pop動作。該參考是否失效? – Phong 2010-07-20 07:41:56

+0

對不起,我誤解了你的問題。指向默認隊列元素的迭代器或指針可能會在推送或彈出時失效。但是,你可以創建一個std :: queue >,它不會使迭代器或指向容器的指針無效。 – 2010-07-20 08:03:04