当前位置: 首页 > news >正文

C++——vector互换容器与预留空间

一.vector互换容器

功能描述:实现两个容器内元进行互换
 函数原型:
  swap(vec);  //将vec与本身的元素互换

实例:        

//1.基本使用
void test01()
{vector<int>v1;for (int i = 0; i < 10; i++){v1.push_back(i);}cout << "交换前:" << endl;printVertor(v1);vector<int>v2;for (int i = 10; i > 0; i--){v2.push_back(i);}printVertor(v2);cout << "交换后:" << endl;v1.swap(v2);//将vec与本身的元素互换printVertor(v1);printVertor(v2);}//2.实际用途
//巧用swap可以收缩内存空间
void test02()
{vector<int>v;for (int i = 0; i < 100000; i++){v.push_back(i);}cout << "v的容量为:" << v.capacity()<<endl;cout << "v的大小为:" << v.size() << endl;v.reserve(3);//重新指定大小  指定完大小变了,容量不变 所以导致占正很大的容量cout << "v的容量为:" << v.capacity() << endl;cout << "v的大小为:" << v.size() << endl;//巧用swap收缩内存vector<int>(v).swap(v);cout << "v的容量为:" << v.capacity() << endl;cout << "v的大小为:" << v.size() << endl;/*vector<int>(v).swap(v); 原理:可以把上面代码看成两段1.vector<int>(v)   2.swap(v)第一段vector<int>(v) :匿名对象,相当于调用拷贝构造函数利用v创建了一个新的对象,且该对象没有名,他会利用v目前所占的元素个数来初始化这个匿名对象的大小第二段swap(v) :相当于进行了容器之间的交换  在这里实现了v与匿名对象互换了指向的容器注:匿名对象在当前行执行完就会被编译器回收,所以不会出现占用内存的情况*/
}

总结:swap可以使两个容器互换,可以达到实用的收缩内存效果

二.vector预留空间

功能描述:减少vector在动态扩展容量时的扩展次数
   函数原型:
    reserve(int len);  //容器预留len个元素长度,预留位置不初始化,元素不可访问.

实例:

void test01()
{vector<int>v;//利用reserve预留空间v.reserve(100000);int num = 0;//统计开辟次数int* p = NULL;for (int i = 0; i < 100000; i++){v.push_back(i);if (p != &v[0]){//如果指针p的指向不是首地址那么就让p指向首地址p = &v[0];num++;//记录动态开辟空间的次数}}cout << "num=" << num << endl;
}

总结:如果数据量较大,可以一开始利用reserve预留空间

仅个人看视频笔记与理解,如有误可指出谢谢

http://www.lryc.cn/news/246878.html

相关文章:

  • Unity 自带的一些可以操控时间的属性或方法。
  • vue 项目中使用 mqtt
  • linux shell操作 - 05 进程 与 IO 模型
  • 让SOME/IP运转起来——SOME/IP系统设计(下)之数据库开发
  • Mybatis反射工厂类DefaultReflectorFactory
  • antDesignPro a-table样式二次封装
  • 找免费4K高清图片素材,就上这6个网站
  • 代码随想录算法训练营第35天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
  • 成为AI产品经理——TPR、FPR、ROC、AUC
  • java: Internal error in the mapping processor: java.lang.NullPointerException
  • TCP知识点
  • 大语言模型(LLMs)在 Amazon SageMaker 上的动手实践(一)
  • 顶级数据恢复工具—— 最全的15个数据恢复软件榜单
  • 【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解
  • Ubuntu 22.03 LTS 安装deepin-terminal 实现 终端 分屏
  • HTTP协议,Web框架回顾
  • el-checkbox 对勾颜色调整
  • 系统管理精要:深度探索 Linux 监控与管理利器
  • vue3之echarts渐变柱状图
  • 有一种浪漫,叫接触Linux
  • 构建 App 的方法
  • laravel实现发送邮件功能
  • 概要设计检查单、需求规格说明检查单
  • 达梦列式存储和clickhouse基准测试
  • 【Web】NewStarCtf Week2 个人复现
  • Python实现Windows服务自启动、禁用、启动、停止、删除
  • 【华为OD题库-043】二维伞的雨滴效应-java
  • 百度手机浏览器关键词排名优化——提升关键词排名 开源百度小程序源码系统 附带完整的搭建教程
  • Git 的基本概念和使用方式。
  • MarkDown学习