交换数组

作用: 在数组的内存分配过大时采用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容器交换, 预留空间相关推荐

  1. C++ STL容器vector篇(二) vector容器的构造函数与赋值操作

    构造函数 构造函数的调用有四种方式: 默认构造函数(无参构造); 左闭右开区间元素拷贝给容器本身; 构造函数将n个elem拷贝给容器本身; 拷贝构造函数 代码如下: #include <iost ...

  2. C++ STL容器vector篇(一) vector容器存放内置和自定义数据类型并遍历

    写在前面 存放内置数据类型 代码 存放自定义数据类型 代码 总结 写在前面 本文算是B站黑马C++课程STL-vector部分的一个总结, 包含自己的一些想法(都在代码里了). 存放内置数据类型 以i ...

  3. C++ STL容器vector篇(五) vector容器常用初始化操作总结(一维/二维)

    `vector`初始化方法 一维向量 二维向量 参考 vector初始化方法 一维向量 #include <iostream> #include <vector>using n ...

  4. C++ STL容器vector篇(三) vector容器大小和数组大小, 插入和删除元素, 存储和读取元素

    vector容器的大小(capacity)和存放数据的大小(size) #include <iostream> #include <vector>using namespace ...

  5. STL容器板子(vector篇)

    一.STL的诞生 (1)长久以来,软件界一直希望建立一种可重复利用的东西 (2)C++的面向对象和泛型编程思想,日的就是复用性的提升 (3)大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量 ...

  6. STL中基本容器有: string、vector、list、deque、set、map

    为什么80%的码农都做不了架构师?>>>    在STL中基本容器有: string.vector.list.deque.set.map set 和map都是无序的保存元素,只能通过 ...

  7. 【贪玩巴斯】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是一种 ...

  8. c语言实现容器,C语言三种容器:list vector和deque的区别

    在写C++程序的时候会发现STL是一个不错的东西,减少了代码量,使代码的复用率大大提高,减轻了程序猿的负担.还有一个就是容器,你会发现要是自己写一个链表.队列,或者是数组的时候,既要花时间还要操心怎么 ...

  9. 【C++容器】数组和vector、array三者区别和联系

    目录 一.数组 二.向量vector 三.数组与vector的对比 array和vector,数组三者区别和联系 共同点 不同点 作者:bandaoyu,本文不断更新,源文:https://blog. ...

最新文章

  1. 右键菜单打开文件所在文件夹的插件EasyExplore
  2. Android滑动冲突解决方法
  3. 算法提高 学霸的迷宫
  4. Windows服务安装、卸载方法,卸载后在服务列表中仍显示问题,指定的服务已经标记为删除
  5. Core ML介绍 (Apple机器学习框架)
  6. SAP Spartacus Visible Focus
  7. 微软 Visual Studio 2019 16.5 发布:.NET 移动开发、生产力
  8. Carrier Configuration in Android 6.0 文档翻译
  9. httpClient创建对象、设置超时
  10. linux之ClamAV杀毒软件安装配置
  11. C++ 二叉树深度优先遍历和广度优先遍历
  12. (二) js + Vue 写扫雷
  13. java 数组溢出异常,Java数组超出范围时如何处理多个异常?
  14. Atitit 分布式之道 之常见的分布式技术 1. 第十二章基于对象的分布式系统 1 1.1. Corba dcom 2 2. 第11章 分布式文件系统 - 2 2.1.  常见的分布式文件系统有,G
  15. 深度学习之 RBF神经网络
  16. python文本查重_GitHub - LiuYinCarl/check_homework: 文本查重工具
  17. SHT20温湿度传感器
  18. 普通蓝牙防丢器已过时,onn推出支持苹果 Find My 防丢器
  19. FME2019试用过程
  20. 一个简单的Java例程

热门文章

  1. elasticsearch head插件(5.0及以上版本)
  2. C#调用Java方法(详细实例)
  3. kettle资源库配置
  4. 拥有所有归档文件,但没有备份情况下的数据文件恢复
  5. 对大脑有益的16种食物_对大脑有益的食物有哪些?
  6. 贪心——无重叠区间(Leetcode 435)
  7. 数据3分钟丨MariaDB将借壳上市;前融云CTO杨攀加入涛思数据;​Elastic 8.0正式发布...
  8. 【重要通知】数据技术嘉年华改为线上举办!拥抱元宇宙,我们这么玩儿!
  9. openGauss 上海 Meetup:把企业级数据库能力带给用户
  10. 大罗讲SQL:如何优雅的进行SQL编写?