2012-03-20 103 views
0

我正在使用heapsort對包含結構的大型向量進行排序,並且我的代碼的運行時間很慢。我不想將結構存儲在向量中,而是現在要存儲一個指向結構體的指針。對包含指針的向量排序爲結構VS結構

我的問題是,在引擎蓋下,當我對事物進行排序時會發生什麼,如果我存儲一個指向結構體的指針而不是存儲結構本身,它會更快嗎?

+0

這可能取決於語言,編譯器和執行環境,但一般來說,排序是通過一系列交換來實現的。交換指針通常非常便宜,而交換(大型或複雜)結構可能非常昂貴。您的問題的真正答案是嘗試兩種方法並測量結果。 – Mankarse 2012-03-20 05:27:31

回答

0

當然可以。將對象存儲爲stl容器中的值將導致運行存儲對象的拷貝構造函數。

一般來說,對於性能而言,最好是存儲指針。但是,如果您使用指針,則需要對泄漏和異常安全性更加謹慎。

無論如何,最簡單的事情發生在排序是交換算法。其中涉及拷貝構造:

void swap(T & a, T & b) 
{ 
    T c = a; // copy constructing 
    a = b; // copy constructing 
    b = c; // copy constructing 
} 

複製指針而不是更大的對象的速度更快。