vector容器互换
功能描述:
实现两个容器内元素进行互换

函数原型:
swap(vec);//将vec与本身的元素互换

1.基本使用
代码如下:

#include <iostream>
using namespace std;
//vector容器互换
#include <vector>
//1.基本使用void printVector(vector<int >v) {for (vector<int >::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}void test01() {vector<int >v1;for (int i = 0; i < 10; i++) {v1.push_back(i);}cout << "互换前:" << endl;printVector(v1);vector<int >v2;for (int i = 10; i > 0; i--) {v2.push_back(i);}printVector(v2);v1.swap(v2);cout<<"互换后:"<<endl;printVector(v1);printVector(v2);}int main() {test01();return 0;
}

2.实际用途
巧用swap可以收缩内存空间
当我们重新指定大小的时候,vector容器的容量(capacity)不会变化,如果刚开始给vector容器push_back很多元素,后面resize时又将它变得很小,这个时候vector的size虽然变了,但是capacity是不会变的,这样就会浪费内存空间,我们可以巧用swap解决这个问题
代码如下:

#include <iostream>
using namespace std;
//vector容器互换
#include <vector>
//2.实际用途void printVector(vector<int >v) {for (vector<int >::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}void test01() {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.resize(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;}int main() {test01();return 0;
}

vector(v).swap(v);
为什么可以收缩空间呢?

vector < int > (v) :
用v目前所用元素个数来初始化匿名对象

那当我们使用了swap(v)//容器交换后


等vector< int >(v).swap(v)这行代码执行完,编译器就会自动回收匿名对象,所以那块很大的内存就会被回收,不再占用空间

C++vector容器-互换容器相关推荐

  1. STL之vector,数组线性容器array,list容器,算法find,find_if,bind1st,仿函数

     1.STL(Standard Template Library,是用泛型技术来设计完成的实例)的概念与组成 Iterator(迭代器) Container(容器) Algorithm(算法) A ...

  2. Vector shrink 请求容器降低其容量和size匹配 shrink_to_fit();

    一.先从size 和capacity 说起 resize(),设置大小(size); reserve(),设置容量(capacity); size()是分配容器的内存大小,而capacity()只是设 ...

  3. vector和list容器有哪些区别

    这个问题的本质还是在问顺序表和链表的区别 底层结构不同 vector容器 list容器 一段连续的空间 带头结点的双向循环链表 元素访问方式 vector容器 list容器 支持随机访问-O(1) 不 ...

  4. C++ Vector(向量容器)

    Vector介绍 C++ Vector(向量容器) 是一个线性顺序结构.相当于数组,但其大小可以不预先指定,并且自动扩展.它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组. ...

  5. C++STL总结笔记(一)—— 容器和容器适配器

    文章目录 前言 一.概念 1.1 顺序容器 1.2 容器适配器 1.3 关联容器 二.程序示例 1. vector和Set自定义数据类型的访问 2.vector容器嵌套 3.list容器排序 4.pa ...

  6. C++中的容器(STL容器)container

    1.容器 容器(container)用于存放数据的类模板.可变长数组.链表.平衡二叉树等数据结构在STL中都被实现为容器.使用容器时,即将容器类模板实例化为容器类时,会指明容器中存放的元素是什么类型的 ...

  7. 顺序容器----顺序容器概述,容器库概览

    一.顺序容器概述 一个容器就是一些特定类型对象的集合.顺序容器为程序员提供了控制元素存储和访问顺序的能力.这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应. 顺序容器类型: 容器类型 说明 ...

  8. STL 容器简介:C++ 容器:顺序性容器、关联式容器和容器适配器

    STL标准容器类简介 标准容器类 说明 顺序性容器 vector 从后面快速的插入与删除,直接访问任何元素 deque 从前面或后面快速的插入与删除,直接访问任何元素 list 双链表,从任何地方快速 ...

  9. Java多线程概念[同步容器,并发容器](二)

    同步容器 同步容器通过synchronized关键字修饰容器,保证同一时刻只有一个线程使用容器,从而使容器线程安全. synchronized的意思的同步. 1.Vector和ArrayList都实现 ...

最新文章

  1. Magento 2中文手册之常见概念解析
  2. P4491 [HAOI2018]染色
  3. Django中HttpResponse和JsonResponse的区别和用法
  4. 阿里OSS图片存储java代码示例
  5. arm汇编指令:ldr和adr的区别
  6. 关于Fiori application里取Account image的Odata request是否会阻塞UI的问题讨论
  7. C和指针之动态内存分配堆、栈、全局区(静态区)、常量区对比总结学习笔记
  8. java常用的统计_(OJ)Java常用类-统计数字次数
  9. 基于vue单页应用的例子
  10. ubuntu18.04配置远程服务器:安装ssh
  11. 交友盲盒小程序/全开源版云开发交友盲盒小程序源码
  12. IBM AppScan v9.0.3.12+安全规则17339下载、安装和使用
  13. SD nand flash 简单的读写速度测试
  14. OpenCV.js 视频入门
  15. A1,A2,A3,A4,A5,A6,A7,A8纸张大小图解
  16. 计算机发展历程 思维导图
  17. PHP的WMB队列消费代理的实现
  18. 微信开发、申请微信号测试账号
  19. Cocos2d-JS打造:国内首款正版海贼王手游《航海王启航》
  20. uva 10306 e-coins【dp】

热门文章

  1. Kotlin之函数作为参数传递
  2. LeetCode之Remove Element
  3. python之解析最简单的xml
  4. C/C++之函数返回值为指针或者是引用时常见错误总结
  5. Spring+EhCache缓存实例(详细讲解+源码下载)
  6. 软件项目组织管理(七)项目成本管理
  7. 你们的数学老师是怎么读这些符号?
  8. 头上有多少根头发算秃头?
  9. 只要懂得拒绝,哪会有什么狗血感情与莫名其妙的误会
  10. 那些拧不开瓶盖的女生全都是装的?理工男这样想......