【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()函数不会做任何事情。

相关推荐
lsnm1 小时前
C++新手项目-JsonRPC框架
开发语言·c++·1024程序员节
给大佬递杯卡布奇诺2 小时前
FFmpeg 基本数据结构 AVPacket分析
数据结构·c++·ffmpeg·音视频
南方的狮子先生2 小时前
【数据结构】从线性表到排序算法详解
开发语言·数据结构·c++·算法·排序算法·1024程序员节
程序猿编码2 小时前
Linux 文件变动监控工具:原理、设计与实用指南(C/C++代码实现)
linux·c语言·c++·深度学习·inotify
好好学习啊天天向上3 小时前
多维c++ vector, vector<pair<int,int>>, vector<vector<pair<int,int>>>示例
开发语言·c++·算法
我狸才不是赔钱货3 小时前
CUDA:通往大规模并行计算的桥梁
c++·人工智能·pytorch
winds~4 小时前
【GUI】本地电脑弹出远程服务器的软件GUI界面
运维·服务器·c++
杨筱毅6 小时前
【穿越Effective C++】条款8:别让异常逃离析构函数——C++异常安全的关键支柱
c++·effective c++
code monkey.6 小时前
【探寻C++之旅】C++ 智能指针完全指南:从原理到实战,彻底告别内存泄漏
c++·c++11·智能指针