【C++中resize和reserve的区别】

1. resize的用法

改变当前容器内含有元素的数量(size())比如:

cpp 复制代码
vector<int> vct;

int num = vct.size();//之前的元素个数为num
vct.resize(len);//现在的元素个数为len

如果num < len ,那么容器vct新增len - num个元素,元素的值默认为0;

若再对vct进行插入,如:

cpp 复制代码
vct.push_back(1);//此时将1插入到vct末尾,其下标就为len,容器的容量变为len +1

2. reserve的用法

改变当前容器的最大容量(capacity),不会生成元素,只是确认这个容器允许放入多少对象,如果reserve(len)的值大于当前的capacity(),那么会重新分配一块能存len个元素的空间,然后把之前的vct.size()个元素通过copy construtor复制过来,销毁之前的内存。

3. 代码实现

cpp 复制代码
#include<iostream>
#include<vector>
using namespace;

int mian(){
    vector<int> vct;
    
    vct.reserve(100);
    vct.resize(50);
    cout << vct.size() << " " << vct.capacity() << endl;//50 100
    
    vct.reserve(150);
    cout << vct.size() << " " << vct.capacity() << endl;//50 150

    vct.resize(100);
    cout << vct.size() << " " << vct.capacity() << endl;//100 150

    vct.reserve(50);
    cout << vct.size() << " " << vct.capacity() << endl;//100 150
    return 0;
}

发现在进行了vct.reserve(150)之后,再将reserve()参数设置为比150小的,不发生变化,说明如果新的容量比原来的容量小,reserve()函数不会做任何事情。

相关推荐
徐行110几秒前
C++核心机制-this 指针传递与内存布局分析
开发语言·c++
序属秋秋秋11 分钟前
算法基础_数据结构【单链表 + 双链表 + 栈 + 队列 + 单调栈 + 单调队列】
c语言·数据结构·c++·算法
mldl_1 小时前
(个人题解)第十六届蓝桥杯大赛软件赛省赛C/C++ 研究生组
c语言·c++·蓝桥杯
一个小白11 小时前
C++ 用红黑树封装map/set
java·数据库·c++
Lenyiin1 小时前
《 C++ 点滴漫谈: 三十三 》当函数成为参数:解密 C++ 回调函数的全部姿势
c++·回调函数·lenyiin
埜玊2 小时前
C++之 多继承
c++
1024熙3 小时前
【C++】——lambda表达式
开发语言·数据结构·c++·算法·lambda表达式
mahuifa5 小时前
(2)VTK C++开发示例 --- 绘制多面锥体
c++·vtk·cmake·3d开发
23级二本计科5 小时前
C++ Json-Rpc框架-3项目实现(2)
服务器·开发语言·c++·rpc
rigidwill6666 小时前
LeetCode hot 100—搜索二维矩阵
数据结构·c++·算法·leetcode·矩阵