c++ - C++ 中的 std::vector 与 std::array

标签 c++ arrays vector

std::vector 和 C++ 中的 std::array 有什么区别?什么时候应该优先于另一个?各自的优缺点是什么?我的教科书所做的只是列出它们的相同之处。

最佳答案

std::vector 是一个模板类,它封装了一个动态数组1,存储在堆中,如果添加或删除元素,它会自动增长和缩小。它提供了所有的钩子(Hook)(begin()end()、迭代器等),使其能够与 STL 的其余部分一起正常工作。它还有几个有用的方法可以让你执行在普通数组上会很麻烦的操作,例如在 vector 中间插入元素(它处理在幕后移动以下元素的所有工作)。

由于它将元素存储在堆上分配的内存中,因此相对于静态数组有一些开销。

std::array 是一个模板类,它封装了一个静态大小的数组,存储在对象本身中,这意味着,如果您在堆栈上实例化该类,则数组本身将是在堆栈上。它的大小必须在编译时知道(它作为模板参数传递),它不能增长或缩小。

它比 std::vector 更受限制,但它通常更有效,尤其是对于小尺寸,因为实际上它主要是 C 样式数组的轻量级包装器。但是,它更安全,因为禁用了到指针的隐式转换,并且它提供了 std::vector 和其他容器的许多 STL 相关功能,因此您可以轻松地使用它STL 算法公司无论如何,对于固定大小的限制,它远不如 std::vector 灵活。

关于 std::array 的介绍,请查看 this article ;要快速介绍 std::vector 及其可能的操作,您可能需要查看它的 documentation .


  1. 实际上,我认为在标准中,它们是根据不同操作的最大复杂度来描述的(例如,在恒定时间内随机访问,在线性时间内迭代所有元素,在以恒定的摊销时间结束,等等),但是 AFAIK 除了使用动态数组之外,没有其他方法可以满足此类要求。 正如@Lucretiel 所述,该标准实际上要求元素连续存储,所以 它是一个动态数组,存储在相关分配器放置的位置。

关于c++ - C++ 中的 std::vector 与 std::array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4424579/

相关文章:

c++ - 使用 autotools 安装前缀

c++ - 无法使用 cin.get() 读取两个字符串

javascript - 将一个数分解为 100 的因数并保留余数

javascript - 从函数中传递变量作为参数

java - 以下 java 代码给出输出 1 2 3 。代码是如何执行的?

c++ - 带有结构 vector 的结构

c++ - 如何使用 vector 来存储形状?

c++ - 一个应用程序可以运行另一个应用程序的代码吗?

c++ - 如何将初始化的结构放入结构中?

c++ - 从子类的STL vector 到基类 vector 的转换