c++++中的vector容器功能类似于动态数组,其核心优势在于自动管理内存,无需开发者手动释放。不过,它提供的reserve()与resize()函数虽均与空间分配相关,实际语义却截然不同:reserve()仅预先分配内存空间,不构造任何元素;而resize()不仅分配空间,还会对新增元素进行默认或指定值的初始化。为直观呈现二者差异,本文结合具体代码示例展开对比说明,便于在实际开发中根据需求精准选用,规避因混淆使用引发的运行时崩溃或性能损耗。
1、 调用reserve()可提升vector的容量(capacity),但不会影响其当前元素个数(size)。其中,capacity反映底层已分配但尚未使用的最大存储能力,size则表示当前已构造并有效存在的元素数量,二者互不影响、独立演进。

2、 对比调用reserve()前后的日志输出可见:capacity显著增长,而size维持原值不变。

3、 调用resize()后,vector的size和capacity均可能同步增加——尤其当新尺寸超过当前容量时,会触发扩容并完成元素构造。

4、 日志显示,执行resize()后,size与capacity均明显上升,证实其兼具“扩容”与“增员”双重效果。

5、 reserve()仅作内存预分配之用,所扩展的空间中并无合法对象存在;若此时尝试通过at()或operator[]访问未构造位置,将导致未定义行为,极大概率触发段错误(Segmentation Fault)。

6、 程序异常中断,控制台打印出系统级错误提示,进程随即终止。
7、 在仅调用reserve()预留空间后,唯一安全的添加方式是使用push_back()——该操作会自动构造新元素并更新size。

8、 经resize()调整尺寸后,容器内对应位置的对象已被构造完成,因此支持通过at()或下标语法安全访问。

9、 若在resize()之后继续调用push_back(),新增元素将被追加至现有逻辑末尾,并在必要时再次触发扩容。

10、 最终输出表明:size较初始值增加1,而capacity则按STL实现策略翻倍增长。










