与向量相比,数组有什么优点?

joe*_*_04 5 c++ arrays vector

好吧,经过一整年的编程并且只了解数组之后,我意识到了向量的存在(由 StackOverflow 的一些成员在我之前的一篇文章中)。我自己做了大量的研究和研究,并重写了我用数组、链表和向量编写的整个应用程序。此时,我不确定是否还会使用数组,因为向量似乎更加灵活和高效。由于它们具有自动增大和缩小大小的能力,我不知道我是否会同样多地使用数组。在这一点上,我个人认为数组的唯一优点是更容易编写和理解。数组的学习曲线没什么,向量的学习曲线很小。不管怎样,我确信在某些情况下使用数组和在其他情况下使用向量可能有充分的理由,我只是好奇社区的想法。我完全是一个新手,所以我认为我对两者的严格用法都不够了解。

如果有人稍微好奇的话,这就是我正在练习使用向量的应用程序。它真的很粗糙,需要大量的工作: https ://github.com/JosephTLyons/Joseph-Lyons-Contact-Book-Application

Gal*_*lik 6

Astd::vector管理一个动态数组。如果您的程序需要一个在运行时动态更改其大小的数组,那么您最终将编写代码来完成 astd::vector所做的所有事情,但效率可能会低得多。

它的std::vector作用是将所有代码包装在一个类中,这样您就不需要一遍又一遍地编写相同的代码来执行相同的操作。

访问 a 中的数据std::vector并不比访问动态数组中的数据效率低,因为这些std::vector函数都是编译器优化掉的普通内联函数。

但是,如果您需要固定大小,那么您可以比std::vector使用原始数组稍微更高效。但是,在这些情况下使用 a 不会丢失任何东西std::array

我仍然使用原始数组的地方就像当我需要一个不会传递给其他函数的临时固定大小缓冲区时:

// some code

{ // new scope for temporary buffer

    char buffer[1024]; // buffer
    file.read(buffer, sizeof(buffer)); // use buffer

} // buffer is destroyed here
Run Code Online (Sandbox Code Playgroud)

但我发现很难证明std::vector.


CIs*_*ies 3

这不是一个完整的答案,但我能想到的一件事是,如果你知道自己想要什么,“增长和收缩的能力”并不是一件好事。例如:假设您想节省 1000 个对象的内存,但内存的填充速度会导致向量每次增长。当您可以简单地定义一个固定数组时,您从增长中获得的开销将是昂贵的

一般来说:如果您将使用数组而不是向量 - 您将拥有更多的权力,这意味着没有您实际上不需要的“后台”函数调用(调整大小),不会为您不使用的东西保存额外的内存(向量的大小...)。

此外,使用堆栈(数组)上的内存比堆(向量*)上的内存更快,如下所示

*如此处所示,向量驻留在堆上并不完全准确,但它们在堆上确实比数组持有更多的内存(堆上不持有任何内存)

  • `std::vector` 不会自动缩小。如果在编译时已知大小的上限,您也可以只进行一次分配。 (3认同)
  • 我不认为这是一个真正的问题,因为如果您不想处理向量中的大小调整,则可以使用“resize”成员函数。只要在使用“resize”后不使用“push_back”或类似的方法来增加大小,“vector”就不会进行任何大小调整。 (2认同)