Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++面试系列之vector的resize与reserve

C++面试系列之vector的resize与reserve

作者头像
公众号guangcity
发布于 2023-09-02 02:34:08
发布于 2023-09-02 02:34:08
82800
代码可运行
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)
运行总次数:0
代码可运行

在C++中,resizereserve是用于容器(例如std::vector)的两个成员函数,用于管理vector的大小和内存分配。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
std::vector<int> v1;
v1.resize(1000); //allocation + instance creation
cout <<(v1.size() == 1000)<< endl;   //prints 1
cout <<(v1.capacity()==1000)<< endl; //prints 1

std::vector<int> v2;
v2.reserve(1000); //only allocation
cout <<(v2.size() == 1000)<< endl;   //prints 0
cout <<(v2.capacity()==1000)<< endl; //prints 1

resize函数用于更改容器的大小,可以增加或减少容器中元素的数量。当增加容器的大小时,新添加的元素将会进行初始化。当减少容器的大小时,超出新大小的元素将会被移除。

reserve函数用于预分配容器的内存空间,但不改变容器的大小。它可以用于提前分配足够的内存,以避免频繁的重新分配内存操作,从而提高性能。但是,调用reserve并不会改变容器的大小,只是为容器分配足够的内存空间。

需要注意的是,resizereserve函数在容器类型上的可用性有所不同。resize函数对于大多数容器类型是可用的,而reserve函数只对具有动态大小的容器类型有效,例如std::vectorstd::deque。对于固定大小的容器类型(例如std::array),调用reserve没有任何效果。

从源码层面上来看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void resize(size_type new_size, value_type value = value_type()) {
    if (new_size < size()) {
        erase(begin() + new_size, end()); // 移除超出新大小的元素
    } else {
        insert(end(), new_size - size(), value); // 添加新元素
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void reserve(size_type _n) {
    if (__n > max_size())
     __throw_length_error(__N("vector::reserve"));
   if (capacity() < __n)
     _M_reallocate(__n);
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【C++强基篇】学习C++就看这篇--->STL之vector使用及实现
需要格外注意我们之前string用了memcpy等一系列接口,但是要注意这些接口用是有一定代价的,非常容易导致错误。本质原因就在于,mem一系列的接口是按照字节进行操作的。
HABuo
2025/07/21
2660
【C++强基篇】学习C++就看这篇--->STL之vector使用及实现
【CMU15-445 FALL 2022】Project #1 - Extendable Hashing
Extendible Hashing is a dynamic hashing method wherein directories, and buckets are used to hash data. It is an aggressively flexible method in which the hash function also experiences dynamic changes. ——Extendible Hashing (Dynamic approach to DBMS)
半生瓜的blog
2023/07/20
5910
【CMU15-445 FALL 2022】Project #1 - Extendable Hashing
C++中的vector容器(保姆级讲解)
并不是在原有空间之后续集新的空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间
莫浅子
2022/11/18
1.8K0
C++中的vector容器(保姆级讲解)
C++(STL):11---vector源码剖析
一、vector概述 vector的使用语法可以参考文章之前的几篇文章,总的来说:vector是可变大小数组 特点: 支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢 元素保存在连续的内存空间中,因此通过下标取值非常快 在容器中间位置添加或删除元素非常耗时 一旦vector内存不足,重新申请内存之后,和原vector相关的指针,引用,迭代器都失效。内存重分配耗时很长 通常,使用vector是最好的选择,如果没有什么特殊要求,最好使用vector 与其他容器的比较: vector 可变大小数组。支持快
用户3479834
2021/02/03
4.8K0
C++(STL):11---vector源码剖析
【C++】STL容器——vector类的使用指南(含代码演示)(11)
YY的秘密代码小屋
2024/01/22
1K0
【C++】STL容器——vector类的使用指南(含代码演示)(11)
C++小知识之Vector用法
C++内置的数组支持容器的机制,但是它不支持容器抽象的语义。要解决此问题我们自己实现这样的类。在标准C++中,用容器向量(vector)实现。容器向量也是一个类模板。 标准库vector类型使用需要的头文件:#include <vector>。vector 是一个类模板。不是一种数据类型,vector<int>是一种数据类型。Vector的存储空间是连续的,list不是连续存储的。
用户7886150
2021/01/19
8650
C++初阶:适合新手的手撕vector(模拟实现vector)
上次讲了常用的接口:C++初阶:容器(Containers)vector常用接口详解 今天就来进行模拟实现啦
是Nero哦
2024/02/12
6520
C++初阶:适合新手的手撕vector(模拟实现vector)
【c++丨STL】vector的使用
之前我们学习了string类的使用及模拟实现,相比c语言的字符串,它的功能更强,安全性更高,操作方式更便捷。然而,在处理更复杂的数据集合时,仅仅依赖字符串往往显得力不从心,尤其是当我们需要管理一系列具有相同类型的数据项时,如一系列的数字、字符或甚至是其他字符串。这时,一个更为强大且灵活的数据结构——向量(vector)便应运而生。
ephemerals__
2024/11/13
4220
【c++丨STL】vector的使用
C++:Vector的使用
2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。
小陈在拼命
2024/03/08
1.4K0
C++:Vector的使用
探索C/C++的奥秘之vector
vector<int>是一个类模板,要显示的实例化,并且vector<char>不能代替string。原因:
用户11290648
2024/11/21
1510
探索C/C++的奥秘之vector
如何熟练使用vector?
默认什么元素也没有. 有效元素个数:size=0 容量:capacity=0;
初阶牛
2023/10/14
2210
如何熟练使用vector?
【C++】—— vector使用
STL库里面构造函数参数有空间适配器(allocator),这里先不了解这一方面的内容(后面再详细学习)。
星辰与你
2024/10/17
2600
【C++】—— vector使用
【C++】vector容器初步模拟
使用STL的三个境界:能用,明理,能扩展 ,那么下面学习vector,我们也是按照这个方法去学习
叫我龙翔
2024/03/23
1520
【C++】vector容器初步模拟
【C++】vector的基本使用
1. vector底层也是用动态顺序表实现的,和string是一样的,但是string默认存储的就是字符串,而vector的功能较为强大一些,vector不仅能存字符,理论上所有的内置类型和自定义类型都能存,vector的内容可以是一个自定义类型的对象,也可以是一个内置类型的变量。
举杯邀明月
2023/04/12
1.1K0
【C++】vector的基本使用
Resize 和 Reserve区别
n: 向量的最小容量。 注意,得到的向量容量可能等于或大于n。 成员类型size_type是无符号整数类型。
IsLand1314
2024/10/15
2220
C++初阶-vector的使用及模拟
C++vector的使用及模拟 零、前言 一、什么是vector 二、vector的常用接口说明 1、vector对象常用构造 2、vector对象容量操作 3、vector对象访问及遍历操作 4、vector对象修改操作 5、vector迭代器失效问题 三、vector剖析及模拟实现 1、vector框架及常用接口展示 2、vector模拟常用接口具体细节 3、使用memcpy拷贝问题 4、动态二维数组理解 零、前言 本章将学习C++中的vector类,掌握其使用以及模拟实现 一、什么是vector
用户9645905
2022/11/30
5570
C++初阶-vector的使用及模拟
C++ STL它vector详细解释
Vectors vector它是C++标准模板库部分,它是一种多用途,你可以使用各种数据结构和算法的模板类和库。
全栈程序员站长
2022/07/06
4910
【C++】vector:容器的别样风采
用户11456817
2025/05/21
830
【C++】vector:容器的别样风采
C++ Vector Resize函数[通俗易懂]
void resize (size_type n, value_type val = value_type());
全栈程序员站长
2022/07/23
1.5K0
【C++】vector(上)
vector类似于数组,采用连续存储空间来存储元素,可以用下标对vector元素进行访问,但它的大小是可以动态改变的,而且这个改变可以被容器自动处理
s-little-monster
2024/08/29
3130
【C++】vector(上)
相关推荐
【C++强基篇】学习C++就看这篇--->STL之vector使用及实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验