插入元素后std::vector的容量是否会增加?
关于std::vector插入元素后容量变化的问题解答
嘿,刚上手C++实验的话,std::vector的容量变化确实是个容易搞混的点,我来结合你的代码给你掰扯清楚~
首先得明确两个关键概念:
- size:vector当前实际存储的元素数量
- capacity:vector当前分配的内存能容纳的最大元素数量(不用重新分配内存的情况下)
当你插入元素时,只有当插入后的size超过当前的capacity时,vector才会触发扩容——也就是重新分配一块更大的内存空间,把原有元素拷贝过去,这时候capacity才会增加。如果插入后size还在capacity范围内,那容量不会有变化。
咱们来看你的代码:
#include <iostream> #include <vector> int main() { std::vector<int> v; std::cout << "Capacity of v is " << v.capacity() << '\n'; v.resize (100); std::cout << "Capacity of v after resize is " << v.capacity() << '\n'; v.insert (v.begin(), 2); std::cout << "Capacity of v after insert is " << v.capacity() << '\n'; }
代码执行过程拆解:
- 初始状态:空vector,
size=0,capacity=0(大部分编译器的默认行为),所以第一个输出是Capacity of v is 0。 - 执行
v.resize(100):这个操作会把vector的size设置为100,因为原来没有足够空间,vector会分配能容纳100个元素的内存,所以capacity变成100,第二个输出是Capacity of v after resize is 100。 - 执行
v.insert(v.begin(), 2):插入后size变成101,这已经超过了当前的capacity=100,所以vector会触发扩容。不同编译器的扩容策略略有不同(比如GCC通常是扩容到原来的1.5倍,MSVC是2倍),所以第三个输出可能是150或者200,总之容量肯定会增加。
总结一下:
插入元素后std::vector的容量不一定会增加——只有当插入后的元素总数超过当前容量时,才会触发扩容,容量才会变大。你的代码刚好触发了这个场景,所以容量会增加。
内容的提问来源于stack exchange,提问作者NewOasis
相关产品推荐
相关产品推荐

