C++ STL容器vector篇(四) vector容器交换, 预留空间
交换数组
作用: 在数组的内存分配过大时采用swap()
函数可以回收被过多分配的空间, 减少内存占用
#include <iostream>
#include <vector>using namespace std;void test1()
{// 尾插法插入元素vector<int> v;for (int i = 0; i < 10000; i++){v.push_back(i * 2 + 1);}// 在内存分配过大时采用swap()函数可以回收被过多分配的空间cout<<"size: "<<v.size()<<endl;cout<<"capacity: "<<v.capacity()<<endl;v.resize(3);cout<<"size: "<<v.size()<<endl;cout<<"capacity: "<<v.capacity()<<endl;// 此时使用swap()回收内存vector<int>(v).swap(v);cout<<"size: "<<v.size()<<endl;cout<<"capacity: "<<v.capacity()<<endl;
}int main(int argc, char const *argv[])
{test1();return 0;
}
预留空间
#include <iostream>
#include <vector>using namespace std;void test1()
{// 尾插法插入元素vector<int> v;// 统计内存开辟次数int num = 0;int *p = NULL;for (int i = 0; i < 10000; i++){v.push_back(i * 2 + 1);if (p != &v[0]){p = &v[0];num++;}}cout<<"内存重新分配的次数: "<<num<<endl;// 尾插法插入元素vector<int> v1;// 预留空间reserve(), 使内存不会多次分配v1.reserve(10000);// 统计内存开辟次数int num1 = 0;int *p1 = NULL;for (int i = 0; i < 10000; i++){v1.push_back(i * 2 + 1);if (p != &v1[0]){p = &v1[0];num1++;}}cout<<"利用reserve()预留空间之后, 内存重新分配的次数: "<<num1<<endl;
}/** 内存重新分配的次数: 15* 利用reserve()预留空间之后, 内存重新分配的次数: 1*/int main(int argc, char const *argv[])
{test1();return 0;
}
C++ STL容器vector篇(四) vector容器交换, 预留空间相关推荐
- C++ STL容器vector篇(二) vector容器的构造函数与赋值操作
构造函数 构造函数的调用有四种方式: 默认构造函数(无参构造); 左闭右开区间元素拷贝给容器本身; 构造函数将n个elem拷贝给容器本身; 拷贝构造函数 代码如下: #include <iost ...
- C++ STL容器vector篇(一) vector容器存放内置和自定义数据类型并遍历
写在前面 存放内置数据类型 代码 存放自定义数据类型 代码 总结 写在前面 本文算是B站黑马C++课程STL-vector部分的一个总结, 包含自己的一些想法(都在代码里了). 存放内置数据类型 以i ...
- C++ STL容器vector篇(五) vector容器常用初始化操作总结(一维/二维)
`vector`初始化方法 一维向量 二维向量 参考 vector初始化方法 一维向量 #include <iostream> #include <vector>using n ...
- C++ STL容器vector篇(三) vector容器大小和数组大小, 插入和删除元素, 存储和读取元素
vector容器的大小(capacity)和存放数据的大小(size) #include <iostream> #include <vector>using namespace ...
- STL容器板子(vector篇)
一.STL的诞生 (1)长久以来,软件界一直希望建立一种可重复利用的东西 (2)C++的面向对象和泛型编程思想,日的就是复用性的提升 (3)大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量 ...
- STL中基本容器有: string、vector、list、deque、set、map
为什么80%的码农都做不了架构师?>>> 在STL中基本容器有: string.vector.list.deque.set.map set 和map都是无序的保存元素,只能通过 ...
- 【贪玩巴斯】C++提高编程,掌握STL中最关键的容器技术~(三){map、set、list、queue、stack 五大容器一篇解决!} //2021-08-25
// day_03 // Created by AchesonD16 贪玩巴斯 on 2021/8/19. 1. stack容器 (栈) 1.1 stack 基本概念 栈 概念: stack是一种 ...
- c语言实现容器,C语言三种容器:list vector和deque的区别
在写C++程序的时候会发现STL是一个不错的东西,减少了代码量,使代码的复用率大大提高,减轻了程序猿的负担.还有一个就是容器,你会发现要是自己写一个链表.队列,或者是数组的时候,既要花时间还要操心怎么 ...
- 【C++容器】数组和vector、array三者区别和联系
目录 一.数组 二.向量vector 三.数组与vector的对比 array和vector,数组三者区别和联系 共同点 不同点 作者:bandaoyu,本文不断更新,源文:https://blog. ...
最新文章
- 右键菜单打开文件所在文件夹的插件EasyExplore
- Android滑动冲突解决方法
- 算法提高 学霸的迷宫
- Windows服务安装、卸载方法,卸载后在服务列表中仍显示问题,指定的服务已经标记为删除
- Core ML介绍 (Apple机器学习框架)
- SAP Spartacus Visible Focus
- 微软 Visual Studio 2019 16.5 发布:.NET 移动开发、生产力
- Carrier Configuration in Android 6.0 文档翻译
- httpClient创建对象、设置超时
- linux之ClamAV杀毒软件安装配置
- C++ 二叉树深度优先遍历和广度优先遍历
- (二) js + Vue 写扫雷
- java 数组溢出异常,Java数组超出范围时如何处理多个异常?
- Atitit 分布式之道 之常见的分布式技术 1. 第十二章基于对象的分布式系统	1 1.1. Corba dcom	2 2. 第11章 分布式文件系统 -	2 2.1. 常见的分布式文件系统有,G
- 深度学习之 RBF神经网络
- python文本查重_GitHub - LiuYinCarl/check_homework: 文本查重工具
- SHT20温湿度传感器
- 普通蓝牙防丢器已过时,onn推出支持苹果 Find My 防丢器
- FME2019试用过程
- 一个简单的Java例程
热门文章
- elasticsearch head插件(5.0及以上版本)
- C#调用Java方法(详细实例)
- kettle资源库配置
- 拥有所有归档文件,但没有备份情况下的数据文件恢复
- 对大脑有益的16种食物_对大脑有益的食物有哪些?
- 贪心——无重叠区间(Leetcode 435)
- 数据3分钟丨MariaDB将借壳上市;前融云CTO杨攀加入涛思数据;​Elastic 8.0正式发布...
- 【重要通知】数据技术嘉年华改为线上举办!拥抱元宇宙,我们这么玩儿!
- openGauss 上海 Meetup:把企业级数据库能力带给用户
- 大罗讲SQL:如何优雅的进行SQL编写?