簡體   English   中英

我應該使用哪個STL容器? C ++

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM