C++ STL面试题, C++ 中 vector 的原理?resize 和 reserve 的区别是什么?size 和 capacity 的区别?
C++ STL面试题, C++ 中 vector 的原理?resize 和 reserve 的区别是什么?size 和 capacity 的区别?
QA
Step 1
Q:: C++
中 vector 的原理是什么?
A:: C++
中的 vector 是一种动态数组,它能够自动调整其大小以适应插入和删除操作。vector 内部使用指针来管理其底层数组,并在需要时分配新的更大的数组,然后将旧数组中的元素复制到新数组中。
Step 2
Q:: resize 和 reserve 的区别是什么?
A:: resize() 改变 vector 的大小。如果新大小大于当前大小,则插入默认值。如果新大小小于当前大小,则移除多余的元素。reserve()
只改变 vector 的容量,但不改变其大小。它预先分配内存以避免多次重新分配。
Step 3
Q:: size 和 capacity 的区别是什么?
A:: size() 返回 vector 中当前元素的数量。capacity()
返回在不重新分配内存的情况下,vector 可以容纳的元素数量。
用途
这些问题旨在评估候选人对 C`++` STL 的理解,尤其是 vector 的内部实现和使用。这些知识对于在生产环境中编写高效且可靠的代码至关重要。了解这些概念可以帮助开发人员优化内存管理和性能,特别是在处理大量数据或需要频繁动态调整数据结构的场景中。\n相关问题
C++ 基础面试题, C++ 中 vector 的原理?resize 和 reserve 的区别是什么?size 和 capacity 的区别?
QA
Step 1
Q:: C++
中 vector 的原理是什么?
A:: C++
中的 vector
是一个动态数组,它可以在运行时自动调整其大小以适应新元素的加入。其底层实现通常是一个连续的内存块,当容量不足时,vector
会分配一个更大的内存块,并将现有元素复制到新块中。为了优化性能,vector
会预分配比当前需要更多的内存,以减少频繁的内存分配操作。
Step 2
Q:: resize 和 reserve 的区别是什么?
A:: resize
是改变 vector
的大小,并且会对新增加的元素进行默认构造或复制构造;而 reserve
只是预留足够的空间,它不会改变 vector
的实际大小,仅仅是修改容量(capacity
),以便在后续添加元素时减少不必要的内存分配操作。
Step 3
Q:: size 和 capacity 的区别是什么?
A:: size
表示当前 vector
中实际存储的元素数量,而 capacity
则表示 vector
在不需要重新分配内存的情况下可以容纳的最大元素数量。capacity
通常大于等于 size
。当 size
超过 capacity
时,vector
会重新分配更大的内存以容纳更多的元素。