【发布时间】: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或向量(恕我直言)更有可能产生更大的影响。
标签: c++ arrays performance vector