【问题标题】:Sorting a Vector Containing Pointer to Struct VS Struct对包含指向 Struct VS Struct 的指针的向量进行排序
【发布时间】:2012-03-23 04:59:00
【问题描述】:

我正在使用 heapsort 对包含结构的大型向量进行排序,并且我的代码的运行时间很慢。我现在不想在向量中存储一个结构,而是存储一个指向该结构的指针。

我的问题是,在后台,当我对事物进行排序时实际发生了什么,如果我存储指向结构的指针而不是存储结构本身会更快吗?

【问题讨论】:

  • 这取决于语言、编译器和执行环境,但总的来说,排序是通过一系列交换来实现的。交换指针通常非常便宜,而交换(大型或复杂)结构可能非常昂贵。您问题的真正答案是尝试两者并衡量结果。

标签: sorting pointers struct


【解决方案1】:

当然可以。将对象作为值存储在 stl 容器中将导致运行存储对象的复制构造函数。

一般来说,为了性能,最好存储指针。但是,当您改用指针时,您需要更加小心泄漏和异常安全性。

无论如何,排序中发生的最简单的事情就是交换算法。其中涉及复制构建:

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

复制指针肯定比复制更大的对象快得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 2021-09-15
    相关资源
    最近更新 更多