为什么std::vector比本机数组性能更好? 在java和C++之间的性能比较中,我们的教授声称,在选择STAR::Vector时,选择一个原生数组(动态数组,如代码> int *a=新int [num)< /> >没有任何好处。她也声称,优化后的向量可以更快,但没有告诉我们原因。向量背后的魔力是什么

为什么std::vector比本机数组性能更好? 在java和C++之间的性能比较中,我们的教授声称,在选择STAR::Vector时,选择一个原生数组(动态数组,如代码> int *a=新int [num)< /> >没有任何好处。她也声称,优化后的向量可以更快,但没有告诉我们原因。向量背后的魔力是什么,c++,vector,std,C++,Vector,Std,请只回答性能问题,这不是一般的民意测验 当需要更改元素数量时,使用向量而不是数组有好处 两个优化的向量都不能比数组快 当需要更改元素数量时,使用向量而不是数组有好处 两个优化的向量都不能比数组快 任何具有较低级别内容(如原始数组)的超级优化代码都可以击败或束缚std::vector。但是拥有向量的好处远远超过了从低级代码中获得的任何小的性能提升 向量管理它自己的内存,数组你必须记住管理内存 vector允许您更容易地使用stdlib(使用动态阵列,您必须自己跟踪终端ptr),这是所有编写得非常好

请只回答性能问题,这不是一般的民意测验

  • 当需要更改元素数量时,使用向量而不是数组有好处
  • 两个优化的向量都不能比数组快
  • 当需要更改元素数量时,使用向量而不是数组有好处
  • 两个优化的向量都不能比数组快

  • 任何具有较低级别内容(如原始数组)的超级优化代码都可以击败或束缚
    std::vector
    。但是拥有向量的好处远远超过了从低级代码中获得的任何小的性能提升

  • 向量管理它自己的内存,数组你必须记住管理内存
  • vector允许您更容易地使用stdlib(使用动态阵列,您必须自己跟踪终端ptr),这是所有编写得非常好、经过良好测试的代码
  • 有时候vector甚至可以更快,比如qsort v std::sort,请阅读本文,请记住发生这种情况的原因是编写更高级别的代码通常可以让您更好地解释手头的问题
  • 由于std容器可以很好地用于动态数组没有涵盖的其他所有内容,因此保持代码风格的一致性可以提高可读性,减少出错的可能性

  • 我要记住的一点是,不应该将动态数组与
    std::vector
    进行比较,它们是两种不同的东西。它应该与类似的东西进行比较,不幸的是,类似的东西可能无法进入c++14(boost prolly有一个,我确信有参考实现存在)。
    std::dynarray
    实现不太可能与本机数组有任何性能差异。

    任何具有较低级别内容(如原始数组)的超级优化代码都可以击败或束缚
    std::vector
    的性能。但是拥有向量的好处远远超过了从低级代码中获得的任何小的性能提升

  • 向量管理它自己的内存,数组你必须记住管理内存
  • vector允许您更容易地使用stdlib(使用动态阵列,您必须自己跟踪终端ptr),这是所有编写得非常好、经过良好测试的代码
  • 有时候vector甚至可以更快,比如qsort v std::sort,请阅读本文,请记住发生这种情况的原因是编写更高级别的代码通常可以让您更好地解释手头的问题
  • 由于std容器可以很好地用于动态数组没有涵盖的其他所有内容,因此保持代码风格的一致性可以提高可读性,减少出错的可能性

  • 我要记住的一点是,不应该将动态数组与
    std::vector
    进行比较,它们是两种不同的东西。它应该与类似的东西进行比较,不幸的是,类似的东西可能无法进入c++14(boost prolly有一个,我确信有参考实现存在)。
    std::dynarray
    实现不可能与本机阵列有任何性能差异。

    std::vector在普通阵列上可以提供的唯一性能优化是,它可以请求比当前需要更多的内存。就是这样。将元素添加到its中不会涉及更多的分配


    这也可以通过普通阵列实现。

    在普通阵列上,
    std::vector
    可以提供的唯一性能优化是,它可以请求比当前需要更多的内存。就是这样。将元素添加到its中不会涉及更多的分配



    这也可以用普通数组来实现。

    你是否考虑向你的教授询问她的推理?你在你自己的问题中自相矛盾,我会指出这是错误的:“在选择STD方面没有好处::在本地数组上向量。”矢量将管理你的数组分配,所以有一个非常直接的好处,就是使用向量很难泄露数组分配。@cdhowie right。但我说的是性能。既不安全也不方便。很难相信向量可以比数组快,速度可能和数组一样快,但不会更快。无论如何,这是错误的考虑,在做出选择时,性能问题通常是完全无关的。安全性、方便性和功能性更重要。你是否考虑向你的教授询问她的推理?你在你自己的问题中反驳自己,我会指出这是错误的:“在选择STD中没有益处::向量在原生数组上。”矢量将管理你的数组分配,所以有一个非常直接的好处,就是使用向量很难泄露数组分配。@cdhowie right。但我说的是性能。既不安全也不方便。很难相信向量可以比数组快,速度可能和数组一样快,但不会更快。无论如何,这是错误的考虑,在做出选择时,性能问题通常是完全无关的。安全性、方便性和功能性更为重要。您的第二点也适用于阵列。两者都被认为具有随机访问迭代器。@chris true,但对于动态数组,您必须自己跟踪最终的ptr,因此我将OP的问题重读了几遍:谁说过动态数组?@WhozCraig我认为这就是他所指的本机数组,其他人显然也一样,但希望如此