c++中的 reserve和resize的区别,如何使用

2023-05-16

reserve和resize的区别

1:存储空间重分配的问题:
我们知道存储空间分配的问题起源于容器对象的动态创建和连续存储的特性;因此只有连续存储的容器才可能需要运行时的存储空间分配;
典型就是vector,其他连续存储容器也会部分地需要存储空间冲分配;
第一种:如vector,其元素保存在连续的存储的空间上,当向该vector中插入一个新元素时,必须保持新的容器仍然满足元素连续存储的条件;这时候就要重新分配存储空间,平且把所有的元素都拷贝新开辟的空间里,然后释放原来的存储空间。
第二种:vector当前预留容量足够带插入的新元素,不需要进行存储空间的重分配。
2:存储空间重分配带来巨大的开销那么如何解决内存重分配的问题呢?
顺序容器vector和string都可以用reverse()和resize()来预留空间或者是调整他们的大小,前面迭代器我们知道reverse()用来保留容量,而resize()用来调整容器大小(size,有效元素的个数),而且有的时候也会调整容器的容量。
 

 

reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。

resize 是改变容器的大小,且在创建对象,因此,调用这个函数后,就可以引用容器内的对象了。

void test 01()
{
    int num = 0;
	int *address = NULL;
	vector<int> v;
	for(int i=0; i < 10000000 ; i++)
    {
	    v.push_back(i);
		if(address != &(v[0]))
		{
		    address = &(v[0]);
			num += 1;
		}	
	}
	cout<<"num:"<<num<<endl; //30
}

运行程序发现,vector出现了30次扩容,每次都要内存拷贝。内存比较大,耗时。

void test 01()
{
    int num = 0;
	int *address = NULL;
	vector<int> v;
	v.reserve(10000000); //如果知道这个容器大概存储的元素个数,可以提前预留
	for(int i=0; i < 10000000 ; i++)
    {
	    v.push_back(i);
		if(address != &(v[0]))
		{
		    address = &(v[0]);
			num += 1;
		}
	}
	cout<<"num:"<<num<<endl;//1
}

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++中的 reserve和resize的区别,如何使用 的相关文章

  • c++11多线程 windows临界区、其他各种mutex互斥量 第十二讲

    1 windows临界区 2 多次进入临界区实验 3 自动析构技术 4 recursive mutex递归的独占互斥量 5 带超时的互斥量std timed mutex和std recursive timed mutex include l
  • python 入门 第一讲 9种数据类型

    python语言简洁 计算1 100的整数和 result 61 0 for in range 1 100 result 43 61 i print s 计算并输出n xff01 def fact n if n 61 61 1 return
  • python 入门 第二讲 读取日志文件分析

    https www bilibili com video av77410524 p 61 29 计算传感器日志文件中温度数据的平均值 日志文件包含1万条数据温度数据在文件的第3列输入 xff1a 日志文件 sensor data txt输出
  • python 入门 第三讲 读取中文分析

    统计中文词语出现的次数 以政府一号文件为例 xff0c 统计出现的中文词语数量按照一定标准输出 xff0c 如出现次数等需要解决中文分词问题 xff0c 如 xff1a 这是一门好课 gt 这是 一门 好课 输入 xff1a 2018年一号
  • docker命令

    1 docker version docker version 显示 Docker 版本信息 docker version 例如 xff1a span class token comment docker version span Clie
  • python 入门 第四讲 基本数据类型

    python主要包括9中基本数据类型 数值类型 xff1a 整数 浮点数 复数字节类型 xff1a 字符串 字节串组合类型 xff1a 集合 元祖 列表 字典 为什么会出现不确定尾数 xff1f 计算机 不确定尾数问题来源于浮点数在计算机中
  • Linux - Shell - 在多个文件中查找关键字

    https www cnblogs com xy14 p 11735343 html 1 概述 在多个文件中 查找内容 2 想干啥 目的 在 多个文件 中 查找内容准备 之前在 单个文件里 查找过内容 工具 awk 前提 文件有固定格式查找
  • protobuf repeated数组类型的使用

    http www cppblog com API archive 2014 12 09 209070 aspx protobuf是Google开发的一个序列化框架 xff0c 类似XML xff0c JSON xff0c 基于二进制 xff
  • 分治法,迭代与动态规划及贪心算法感悟

    分治法 xff0c 动态规划法 xff0c 贪心算法这三者之间有类似之处 xff0c 比如都需要将问题划分为一个个子问题 xff0c 然后通过解决这些子问题来解决最终问题 但其实这三者之间的区别还是蛮大的 1 分治法 分治法 xff08 d
  • Python字符串操作大全

    Python中字符串的定义 xff1a 由Unicode码点组成的不可变序列 xff08 Strings are immutable sequences of Unicode code points xff09 Python内置函数提供了强
  • python 入门第五讲 分支与循环

    for i in range 1 15 print i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 从M开始 xff0c 到N结束 xff0c K为步长 for c in 34 hello 34 print c end
  • python 入门第六讲 异常处理

    1 异常的基本用法 2 异常的高级用法 ZeroDivisionError TypeError def foo a try b 43 61 100 a except ZeroDivisionError print 34 can not di
  • python 入门第1七讲 函数的定义与使用

    单元开篇 xff1a 函数定义和使用 1 函数的定义和调用 2 函数的参数传递 3 局部变量和全局变量 4 lambda函数 xff08 匿名函数 xff09 5 函数递归 函数相关的保留字 def 声明函数 return global x
  • python 入门第八讲 组合数据类型基础

    集合类型 xff1a 一组数据的集合 集合的特性 xff1a 无序 xff1a 元素间没有顺序 xff0c 因此要求元素不能相同 xff0c 元素必须是不可变类型 非一致 xff1a 元素类型可以不一样 无索引 xff1a 不能对某个元素进
  • python 入门第九讲 组合数据类型运算函数及方法(非常重要)

    目录 单元开篇 xff08 组合数据类型使用方法 xff09 我是美丽的分割线 我是美丽的分割线 单元开篇 xff08 组合数据类型使用方法 xff09 集合类型的使用 1 2 3 元祖类型的使用 xff08 xff09 列表类型的使用 字
  • ROS学习日志:话题的方式统一控制5台机器人

    在gazebo环境中搭建一个尽量美观的场景 启动5台 turtlebot3 机器人 xff0c 以话题的方式统一控制5台机器人的运动速度 xff08 1 xff09 原有文件基础上添加多个机器人 xff08 2 xff09 统一话题控制五个
  • Ubuntu20.04 ROS读取basler相机图像步骤。MATLAB2021b标定basler单目相机

    运行环境 xff1a Ubuntu20 04 xff08 64 Bit xff09 ROS版本 xff1a Noetic 网卡型号 xff1a Realtek RTL 8156外置网卡 相机型号 xff1a acA 1920 25gc xf
  • 人工智能该如何学习

    看了一个小视屏 xff0c 做的一个笔记 人工智能专业选择 兴趣驱动 xff0c 不要盲目跟风 xff01 1 需要数学基础 微积分 线性代数 概率论和数理统计 2 一门合适的语言 xff0c 推荐python 3 学习算法的几个层次 看懂
  • C++ 中的深拷贝与浅拷贝

    https www cnblogs com cxq0017 p 10617313 html
  • python 入门 第十讲 文本数据清洗及统计

    程序需求 xff1a 文本类信息清洗及统计的可能需求场景 从多个来源获得的格式不一的文本类型数据进行汇总及初步统计难点 xff1a 多个来源数据的清洗 格式化及归一化 相同内容去重等 大学MOOC之问 xff1a 在中国参与MOOC 建设的

随机推荐