2012-06-02 143 views
0

我有一個排序的std::vector相對較小的大小(從5到20個元素)。 我用std::vector因爲數據是連續的,所以我有速度,因爲緩存。 在一個特定的點上,我需要從這個vector中刪除一個元素。std :: vector vs std :: insert

我現在有一個疑問:哪種方法可以在以下兩個選項之間移除該值的最快方法?

  1. 該元素設置爲0,並調用sort重新排序:這具有複雜性,但 元件是在相同的高速緩存行。
  2. 請致電erase將複製(或memcpy誰知道??)後它的所有元素 1地方(我需要調查擦除後的scense)。

你知道哪一個更快嗎?

我認爲同樣的方法可以考慮插入一個新的元素而不碰到矢量的最大容量。

問候

AFG

+4

爲什麼你不測量和發現? –

+2

此外,我沒有看到如何排序(涉及複製)可能比只是複製更快。 –

+0

...以及容器元素的類型也很重要。 – dirkgently

回答

1

如果你不關心元素的順序,你可以與最後一個交換的元素。

void Remove(std::vector<Object> &vec, iterator i) { 
    iterator last = vec.end()-1; 
    if (i != last) 
     std::swap(*i, *last); 
    vec.erase(last); 
} 

你提到的元素設置爲0。如果這意味着你有一個指針,那麼你可能不需要交換:

void Remove(std::vector<Object *> &vec, iterator i) { 
    vec[i] = vec.back(); 
    vec.erase(vec.end()-1); 
} 

如果你關心的順序,那麼你的第二個選項使用使用擦除()將保留它並做最少量的工作。這幾乎肯定會比訴諸速度更快。