2012-03-20 101 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 
} 

复制指针而不是更大的对象的速度更快。