C++中的vector容器功能类似于动态数组,其优势在于无需手动管理内存释放。然而,它所提供的reserve与resize函数虽都涉及空间分配,实际作用却存在明显差异:reserve用于预分配存储空间但不初始化元素,而resize不仅分配空间还会对元素进行初始化。为清晰展现两者区别,本文通过具体示例进行对比分析,帮助理解在不同场景下如何正确使用这两个函数,避免因误用导致性能下降或逻辑错误。
1、 调用reserve函数可增加vector的容量capacity,但不会改变其当前元素数量size。其中,capacity表示vector最多能容纳的元素个数,而size表示当前实际存储的元素个数,两者在调用后保持独立变化。
2、 调用reserve前后记录日志,容量扩大,元素数量保持不变。
3、 调用resize函数可同时扩大容器的容量和元素数量。
4、 调用resize后,从日志可见capacity与size均明显增大。
5、 reserve仅用于预分配内存空间,不能通过at或下标访问元素,否则将引发段错误。
6、 程序运行后,控制台显示错误信息,随后异常终止。
7、 调用reserve预留内存后,只能通过push_back向其中添加元素。
8、 调整容器尺寸,创建对象,并可通过at或下标访问元素。
9、 调整容器大小后,使用push_back添加元素会将其置于新分配的空间中。
10、 输出结果显示,元素数量比原先多了一个,而容量则扩展为之前的两倍。
