2011-05-02 103 views
4

stl中有什麼函數可以連接兩個std::queue對象嗎?合併兩個std ::隊列

+0

你真的需要使用隊列嗎?如果你使用std :: list,你可以在兩個列表中進行連接(假設它們不需要排序)。 – GWW 2011-05-02 20:45:00

+2

這意味着什麼呢?如何在合併隊列中排序條目? – 2011-05-02 20:52:32

回答

5

std::queue適配器不支持迭代,因此您實際上必須使用自己的方法來執行此操作。但考慮到你需要這個功能,你應該考慮一個不同的容器。如果你需要隨機訪問,大概std::deque。如果您只需要像隊列一樣的正面/背面訪問,可以考慮使用std::list,這可以在不變的時間內連接到splice

+2

除非使用列表,否則只有在他經常拼接大型列表時纔有好處,因爲列表在執行*其他所有操作時會慢得多。 – GManNickG 2011-05-02 20:56:46

0

似乎沒有要在STL提供的任何選項,但我能想到的一些其他的東西,你可以寫自己:

  1. 編寫自己的代碼來讀取一個隊列到另一個,但是這是上)。

  2. 使用std::copy操縱底層的std::deque容器,同樣是O(n)。

  3. 根據std::queue創建您自己的容器,但可以維護多個隊列以模擬O(1)中的聯接。