2011-02-18 73 views
2

我需要排序集合Element。有排序Element*矢量即排序向量指針

std::vector<Element*> vectRef; 

分選的Element向量的任何特定的優勢。

std::vector<Element> vect; 

假設我相應地寫入比較器。

Element結構是顯示如下:

struct Element 
{ 
    Record *elm;         

    Element(Record *rec) 
    { 
        elm = new Record(); 
        //...copy from rec 
    } 
    ~Element() 
    { 
        delete elm; 
    } 
}; 
+0

如果你正在使用指針,你會想嘗試boost指針容器的ptr_vector。他們是神派的! (我將標題編輯爲'指針向量',因爲沒有'引用向量'這樣的東西) – Nav 2011-02-18 05:50:14

回答

2

有多貴是Element的拷貝構造函數?它是否做了包含Record對象的深層副本?排序vector<Element>將需要Element對象的許多副本,除非swap正確過載。我不確定規則是關於sort是否必須使用swap以及是否必須使用用戶的重載版本swap; http://accu.org/index.php/journals/466有一些關於這方面的信息。排序vector<Element*>只會複製周圍的指針,可能會更便宜。 C++ 0x改變了這一點,假設Element有一個有效的移動構造函數和移動賦值操作符。

0

這取決於如何複製Element s完成。如上所示,Element包含指向Record的指針,但未定義複製構造函數。 如果這是正確的,複製Element對象應該便宜又快速,所以你可以通過存儲指向Element的指針獲得很少或沒有任何東西。

同時,我必須指出,做淺拷貝可以很容易地引入錯誤。當/如果更改Element以進行深度複製,則可能會從存儲和排序指針而不是Element對象中獲得更多(但它將取決於複製Record的代價)。