2009-06-02 41 views
4

我讀過所有stl容器都提供了交換算法的專門化,以避免調用默認方法使用的複製構造函數和兩個賦值操作。但是,當我認爲在某些代碼中使用隊列會很好時,我注意到(與vector和deque不同)隊列不提供此方法?我只是決定使用一個deque而不是一個隊列,但我仍然很想知道這是爲什麼?爲什麼std隊列沒有定義交換方法專門化

回答

3

C++0x將交換添加到容器適配器,如std :: queue。我只能推測爲什麼它從目前的標準中缺失。 在this discussion有人提出了一個解決辦法:

有一個解決方案,因爲該標準使得所需的部件保護, 稱爲繼承。 [只是不要通過std適配器] 創建一個模板化的結構繼承所需的適配器,只提供 的構造函數,並將args轉發到適配器類,編寫 交換成員是一個快照,因爲所需的項目是受保護的成員 的標準適配器。

+0

問題是「是否有缺失的原因?」 – 2009-06-02 01:57:23

1

我確定他們被遺漏作爲疏忽。平心而論,我使用std :: queue和std :: stack相當多,並且從來不需要交換兩個。我認爲你使用deque而不是隊列很好。諸如typedef std::deque<MyType> QueueType應該提供足夠的提示應該如何使用容器。

+0

我正在維護兩組需要處理的元素,當前集合和下一輪處理的集合,所以我需要在每輪結束時將已填充的nextQueue替換爲耗盡的currentQueue。嚴格地說,他們不必排隊...他們可能只是實際上的載體......嗯 – 2009-06-02 02:13:58

相關問題