我正在使用堆排序对包含结构的大型向量进行排序,并且我的代码的运行时间非常慢。我现在不想在向量中存储结构,而是存储指向该结构的指针。
我的问题是,在幕后,当我对事物进行排序时实际发生了什么,如果我存储指向结构的指针而不是存储结构本身会更快吗?
当然可以。将对象作为值存储在 stl 容器中将导致运行存储对象的复制构造函数。
一般来说,为了性能,最好存储指针。然而,一旦您使用指针,您将需要更加小心泄漏和异常安全。
无论如何,排序中最简单的事情就是交换算法。其中涉及复制构造:
void swap(T & a, T & b)
{
T c = a; // copy constructing
a = b; // copy constructing
b = c; // copy constructing
}
复制指针肯定比复制更大的对象要快得多。