高性能程序,啥是更好的向量数组或向量向量
Posted
技术标签:
【中文标题】高性能程序,啥是更好的向量数组或向量向量【英文标题】:High performance program, what is better array of vectors or vector of vectors高性能程序,什么是更好的向量数组或向量向量 【发布时间】:2018-01-13 19:46:05 【问题描述】:我正在编写必须是高性能程序的代码。
我现在拥有的是我发明的一组“A”类型的向量。 "A" 是一个有 long long 和 double 的结构体。
vector<A>* ord = new vector<A>[X];
X 是一个直到执行时我才知道的值。
我要做的是,对于每个向量,通过 long long 变量对其对象进行排序,然后执行一些操作。
我的问题是,就性能而言,我现在拥有的“向量数组”更好,或者最好创建一个这样的向量向量:
vector<vector<A>> ord;
二思:
请注意,我不必在向量之间进行运算。 我在其他帖子中读到,使用 `new' 运算符是个坏主意,在这种情况下,我应该在我的程序中使用它。【问题讨论】:
ericlippert.com/2012/12/17/performance-rant 虽然老实说我看不出第一个版本会更快(只要你正确使用std::vector
)
除非您已经确定由于std::vector<std::vector<A>>
而存在真正的性能瓶颈,否则不要使用替代方案使事情复杂化。即使您确实找到了瓶颈,我也怀疑使用 C 数组是否会有所帮助。最后,如果您需要拥有指针,请首选 std::unique_ptr
而不是原始拥有指针。
您选择排序和执行“其他操作”的算法,以及您是否能够使用 SIMD 或其他优化,以及您的代码是否多线程可能比您使用new
或向量(恕我直言)更有可能产生更大的影响。
【参考方案1】:
动态分配的向量数组和向量向量在优化代码中可能相同。并且向量的向量处理了很多问题,除非您遇到一些非常不寻常的问题,否则您当然应该更喜欢该解决方案。
过早的优化是万恶之源——托尼·霍尔爵士
【讨论】:
【参考方案2】:您提到“X 是一个直到执行时我才知道的值”,这是否意味着它是静态的?
如果您需要它是动态使用向量,但如果 X 不更改使用数组,因为它将为您节省一点内存(如果 X 是静态的,两者将以几乎相同的速度运行)。
至于您关于何时使用 new 的问题,我将遵循这篇文章: When to use "new" and when not to, in C++?
【讨论】:
以上是关于高性能程序,啥是更好的向量数组或向量向量的主要内容,如果未能解决你的问题,请参考以下文章