[英]Which STL container should I use? C++
我有一個對象的“列表”,我想從中隨機獲取對象並將其推到此列表的前面。 只會執行這種操作。 因此,我不需要快速訪問列表的末尾,只需要訪問其他任何地方的前端和平均訪問權限。
哪個容器最適合這個? 我在考慮std::vector
,但我讀過insert
操作效率不高。 然后我想出了std::deque
因為它可以快速訪問前面,但是在特定位置方法的erase
效率如何呢?
在此先感謝您的幫助。
我們可以為您提供指導,但沒有確定的答案 - 您需要自己進行基准測試,因為它至關重要取決於您的集合和對象大小:
std::vector
將更快,因為即使您需要復制更多數據,更好的隨機訪問時間(對於std::list
O(1)vs O(n))和緩存局部性將占主導地位。 std::list
會更快,因為雖然您需要O(n)來選擇隨機對象,但由於許多大型對象的復制速度非常慢,因此插入速度會快得多。 但究竟在這兩種情況之間的截止位置我不能說。
此外,如果你可以逃避交換元素而不是插入,這是一個明智的選擇:總是使用std::vector
。
基於這個答案: https : //stackoverflow.com/a/471481/1284631 (以及在此: https : //stackoverflow.com/a/471461/1284631 ),我會找一個列表。 追加,迭代,插入和刪除都很便宜。
PS:這取決於隨機位置是否是基於索引的(也就是說,如果您在數字上知道什么位置,或者通過列表上的迭代並測試其屬性來移動到前面的對象)。
所以:如果在沒有迭代列表的情況下知道位置,那么去一個向量。 如果該位置需要迭代集合,則轉到列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.