【问题标题】:Vectors vs arrays (speed) [duplicate]向量与数组(速度)[重复]
【发布时间】:2014-03-03 22:19:34
【问题描述】:

我想知道哪个是一般用途最快的。因此,我们可以使用以下代码来代替 push_back() 数组。我认为数组更快,但我不确定。

 int *p;
 p = new int[5];
 for(int i=0;i<5;i++)
    *(p+i)=i;

 // realloc
 int* temp = new int[6];
 std::copy(p, p + 5, temp); 
 delete [] p;
 p = temp; 

【问题讨论】:

  • 把分析器放在上面。 :)
  • 只需使用 std::vector - 已经实现
  • 一般来说,“真正的”C 数组比任何类型的对象访问起来都更快。 (当然,快速访问并不是选择构造的唯一标准。)
  • 这正是 std::vector 在幕后所做的,只是自动内存管理、异常安全、摊销的重新调整大小成本等。
  • 一个数组通常会比一个向量“更快”,但就像之前的 cmets 所说的,std::vector 会为你处理一切......对速度的影响应该可以忽略不计,不值得担心:)

标签: c++ arrays


【解决方案1】:

std::vector 的实现通常针对一般用途进行了优化。对于任何特定情况,本机数组的性能会更好或相等,但如果您事先不知道确切的使用特性,向量通常会具有不错的性能,并且比未经过深思熟虑的本机数组更好.例如,在上面的代码中,您显式地重新分配了内存,而向量实现可能已经分配了足够的内存(例如,使向量至少有一个缓存行)。

【讨论】:

  • 我们不要忘记,使用好的 allocatorstd::vector 可能会以几乎 0 的努力获得非常有趣的性能,尤其是池分配器。
猜你喜欢
  • 2012-07-02
  • 2019-09-25
  • 2013-08-26
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
相关资源
最近更新 更多