interview
cpp-basics
C++中vector的原理?resize和reserve的区别是什么?size和capacity的区别?

C++基础面试题, C++ 中 vector 的原理?resize 和 reserve 的区别是什么?size 和 capacity 的区别?

C++基础面试题, C++ 中 vector 的原理?resize 和 reserve 的区别是什么?size 和 capacity 的区别?

QA

Step 1

Q:: C++ 中 vector 的原理是什么?

A:: C++ 中的 vector 是一种动态数组,能够自动管理内存并根据需要扩展大小。vector 内部维护一个指向动态分配的数组的指针,包含当前元素个数的 size 和分配的内存空间大小 capacity。当 size 达到 capacity 时,vector 会重新分配更大的内存空间,并将现有元素拷贝到新的内存地址,从而实现扩展。

Step 2

Q:: resize 和 reserve 的区别是什么?

A:: resize 是用来调整 vector 的大小,使其包含指定数量的元素。如果新的大小比当前的 size 大,vector 会填充额外的元素。如果比当前小,则会移除多余的元素。而 reserve 则是用来预留内存,它只影响 vectorcapacity,不会改变 size,用于避免频繁的内存重新分配操作。

Step 3

Q:: size 和 capacity 的区别是什么?

A:: size 是指 vector 当前包含的元素个数,而 capacity 则表示 vector 当前分配的内存空间可以容纳的最大元素个数。size 永远小于或等于 capacity。当 size 达到 capacity 时,如果再插入元素,vector 就会扩展内存空间。

用途

这些问题涉及 C`++` 中 `vector` 的内部机制,这是因为在实际开发中,`vector` 是使用最为广泛的容器之一。了解其工作原理有助于写出高效的代码,尤其是在处理大数据量或对性能要求较高的系统时。面试中考察这些内容是为了确保候选人能够合理地选择并使用合适的容器,理解和优化内存管理,以及掌握如何避免不必要的性能开销。\n

相关问题

🦆
C++ 中 vector 是如何扩展内存的?

vectorsize 达到 capacity 时,vector 会自动扩展内存,一般会将 capacity 翻倍以减少频繁的内存重新分配。扩展时会分配一块新的、更大的内存空间,并将旧的元素拷贝过去,旧的内存空间随后被释放。

🦆
C++ 中 vector 的迭代器在 resize 之后是否仍然有效?

vector 调用 resize 增加元素时,如果没有发生重新分配(即新的 size 仍小于或等于 capacity),那么原有的迭代器仍然有效;如果发生了重新分配,则所有的迭代器都将失效。

🦆
C++ 中使用 vector 时如何减少内存重新分配的次数?

可以通过使用 reserve 方法预先分配足够的内存空间,以减少插入新元素时的内存重新分配次数,这在处理大批量数据时尤其重要。

🦆
除了 vector 之外,C++ 中常用的容器还有哪些?

C++ 标准库中常用的容器还有 listdequemapset 等。每种容器都有其适用场景,例如 list 适合频繁插入和删除操作,map 适合快速查找等。