c++ - push_back 如何在 STL vector 中实现?

标签 c++ vector

我在一次采访中被问到这个问题。

我回答的点是这样的

1) 指向当前位置的索引;

2) 必要时调整大小。

谁能详细说明一下?

最佳答案

STL vector有一个 size (当前存储元素的数量)和 capacity (当前分配的存储空间)。

  • 如果size < capacity , 一个 push_back简单地将新元素放在末尾并递增 size 1.
  • 如果size == capacitypush_back 之前,分配了一个新的更大的数组(两倍大小是常见的,但这是依赖于实现的 afaik),所有当前数据都被复制(包括新元素),并释放旧分配的空间。如果分配失败,这可能会引发异常。

操作的复杂性是摊销 O(1),这意味着在 push_back 期间导致调整大小,它不会是一个恒定时间操作(但通常在许多操作中,它是)。

关于c++ - push_back 如何在 STL vector 中实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2625006/

相关文章:

c++ - C++ 异常是否足以实现线程本地存储?

c++ - std::vector 调整大小方法背后的设计原理是什么?

c++ - boost::shared_ptr 中没有名为 value_type 的类型

c++ - 从 vector 的 vector 创建一个板

matlab - 禁用 MATLAB 的隐式扩展

c++ - 在 C++ 中使用 vector 给了我一个我无法理解的错误

c++ - 哈希函数/代码

c++ - C++数学计算中的内部时间变量

c++ - Qt 如何将文件移动到另一个现有目录

c++ - 比较两个 vector 中的元素时出现错误 - 我做错了什么吗?