我讀過所有stl容器都提供了交換算法的專門化,以避免調用默認方法使用的複製構造函數和兩個賦值操作。但是,當我認爲在某些代碼中使用隊列會很好時,我注意到(與vector和deque不同)隊列不提供此方法?我只是決定使用一個deque而不是一個隊列,但我仍然很想知道這是爲什麼?爲什麼std隊列沒有定義交換方法專門化
4
A
回答
3
C++0x將交換添加到容器適配器,如std :: queue。我只能推測爲什麼它從目前的標準中缺失。 在this discussion有人提出了一個解決辦法:
有一個解決方案,因爲該標準使得所需的部件保護, 稱爲繼承。 [只是不要通過std適配器] 創建一個模板化的結構繼承所需的適配器,只提供 的構造函數,並將args轉發到適配器類,編寫 交換成員是一個快照,因爲所需的項目是受保護的成員 的標準適配器。
1
我確定他們被遺漏作爲疏忽。平心而論,我使用std :: queue和std :: stack相當多,並且從來不需要交換兩個。我認爲你使用deque而不是隊列很好。諸如typedef std::deque<MyType> QueueType
應該提供足夠的提示應該如何使用容器。
+0
我正在維護兩組需要處理的元素,當前集合和下一輪處理的集合,所以我需要在每輪結束時將已填充的nextQueue替換爲耗盡的currentQueue。嚴格地說,他們不必排隊...他們可能只是實際上的載體......嗯 – 2009-06-02 02:13:58
相關問題
- 1. 爲什麼不是std :: string是std :: vector的專門化?
- 2. 爲什麼沒有std :: shared_ptr <T[]>專業化?
- 3. 有沒有一種方法來專門爲Android指定CSS
- 4. 爲用戶定義類型的shared_ptr專門化std庫函數是否合法?
- 5. 爲什麼std :: hash沒有在C++ 0x中爲std :: weak_ptr定義?
- 6. 有沒有辦法專門
- 7. 沒有專門定時它
- 8. 爲什麼std :: cin.getline沒有采用std :: string的oveloaded方法?
- 9. 專門化派生類的std :: hash
- 10. std ::模板專門化中的數組
- 11. 如何爲用戶定義的類型專門化std :: hash <T>?
- 12. C++部分模板專業化:如何專門化std :: iterator_category
- 13. 爲什麼這個可變參數模板專門化定義不能編譯?
- 14. 爲什麼OpenCV沒有專門的區域數據結構?
- 15. 爲什麼沒有std :: inplace_merge_unique?
- 16. 爲什麼沒有std :: from_string()?
- 17. 爲什麼沒有std :: on_exit?
- 18. 爲什麼Cocoa中沒有隊列?
- 19. 爲什麼ArrayList沒有實現隊列?
- 20. C++模板專門化方法問題
- 21. 爲什麼沒有爲命名指針類型定義方法?
- 22. C++模板專業化方法定義
- 23. 爲什麼java.util.function沒有爲所有基元類型定義專門的函數接口?
- 24. 爲什麼這個std :: bind沒有轉換成std :: function?
- 25. 專門製作有DEBUG定義嗎?
- 26. 爲什麼在C++ std :: vector中沒有pop_front方法?
- 27. 爲什麼std :: string沒有大寫/小寫,格式等方法?
- 28. 如何爲多個鍵類型專門化一個std映射?
- 29. 爲什麼這個方法在我的IDE中沒有定義?
- 30. 爲什麼沒有在Set界面上定義的replace()方法?
問題是「是否有缺失的原因?」 – 2009-06-02 01:57:23