[C++]-vector 向量
什么是向量容器
向量容器是一种支持高效的随机访问和高效的尾部插入新元素的容器。
向量容器一般实现为一个动态分配的数组,向量中的元素连续的存放在这个数组中,因此对向量容器进行随机访问具有和动态访问动态数组一样的效率。
内部如何工作
在使用动态数组时,必须用new分配空间时指定数组的大小,并且不能在使用过程中将其空间动态扩展。为了实现向量的动态插入,当数组空间不够时,向量容器对象会自动用new分配一个更大的空间,使用=赋值号将原有的数据分别复制到新的空间中,并将原有空间释放。
但是,如果每一次进行尾插入是都要进行以上操作肯定是我们无法接受的。所以,每次向量容器扩展空间时,实际上分配的空间一般都会大于所需要的空间。另外,将已有元素从向量容器中删除时,多出的闲置空间并不会被释放,因为后面可能会进行元素插入而是用该空间。
因此,向量容器对象已分配的空间能容纳的实际元素个数一般都大于实际存放的元素个数。前者叫做容量capacity,后者叫做大小size。
注意事项
向量容器中插入新元素时,插入位置后面的元素都要顺序后移,因此向量容器插曲元素位置越靠前其效率越低,在向量尾部插入元素的效率是比较高的。
如果在插入元素时引起了向量容量的扩展,那么在执行插入操作之前所获得的一切迭代器和指向向量元素的指针、引用都将失效,因为内存地址发生改变。如果未引起空间扩展,那么只有在插入元素位置之后的地址会发生变化,也就是说引起后面的一些指针引用等失效。
定义和初始化方法
vector<int>v1; // 默认构造函数,v1为空
vector<int>v2(v1); // v2是v1的一个副本,v2就是对v1的复制粘贴,地址不同
vector<int>v3(n,i); // v3包含n个值为i的元
vector<int>v4(n); // v4包含n个值为0的元素
向量容器的一些方法
v.push_back(e); // 再数组最后添加一个值为e的数据,追加
v.erase(v.begin()+1); // 删除指定元素,参数是被删除元素的地址,例子中删除的时第二个元素
v.pop_back(); // 移除数组最后一个元素
v.clear(); // 清空所有元素
len = v.size(); // 返回数组的元素个数,大小
emp = v.empty(); // 判断数组是否为空,true/false
v.capacity(); // 返回v的容量
v.reserve(n); // 当容量大于n时,什么也不做,反之扩大v的容量,使之不小于n
参考书
《C++语言程序设计(第四版)》 清华大学出版社
[C++]-vector 向量的更多相关文章
- 学习笔记之vector向量容器
今天复习到vector向量容器,里面包括vector向量容器的一些优点以及具体的使用方法及代码,分享给大家. Vector向量容器不但能够像数组一样对元素进行随机访问,还可以在尾部插入元素,是一种简单 ...
- vector 向量容器用法祥解
vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: ...
- STL --> vector向量
vector向量 vector是一种对象实体,能够容纳许多其他类型相同的元素,因为又被称为容器. 头文件 在使用它时,需要包含头文件 <vector>. #include <vect ...
- vector向量容器(常用的使用方法总结)
关于STL中vector容器的学习,编译运行后边看代码,边看执行结果效果更佳,还是想说看别人的代码一百遍,不如自己动手写一遍. vector向量容器不但能像数组一样对元素进行随机访问,还能随时在尾部插 ...
- vector向量容器
vector向量容器不但可以像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单高效的容器,可以代替数组. vector具有内存自动管理的功能,对于元素的插入和删除,可以动态的调整所占内存. ...
- 标准模板库使用参考——vector向量容器
C++的STL从广义上讲分为algorithm(算法),container(容器)和iterator(迭代器)三类,包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法. 在C++标准库中,ST ...
- java Vector向量
9.3.4 Vector向量 [专业IT培训机构,真正零首付入学www.bjsxt.com] Vector底层是用数组实现的List,相关的方法都加了同步检查,因此“线程安全,效率低”. 比如,ind ...
- vector向量容器元素排序与查找
1.利用标准库函数sort()对vector进行排序 参考源码: #include <algorithm> #include <vector> vector<int> ...
- C++STL之vector向量容器
vector向量容器 vector向量容器不但能向数组一样对元素进行随机访问, 还能在尾部插入元素 vector具有内存自动管理的功能, 对于元素的插入和删除, 可动态调整所占的内存空间 vect ...
- c++中vector向量几种情况的总结(向量指针,指针的向量)
1.标准库vector类型 vector 是同一种类型的对象的集合.每一个对象都有一个相应的整数索引值.标准库将负责管理与存储元素相关的内存.我们把 vector 称为容器,是由于它能够包括其它对象. ...
随机推荐
- layui table 列宽百分比显示
var layer = layui.layer, form = layui.form, table = layui.table; var $ = layui.$; /*select gysmc,zyz ...
- 记一次ios下h5页面图片显示问题
刚入职公司时做了一个移动端图片预览的组件,之前也有业务组用过,没发现什么问题,但是这次有两个很诡异的问题. 一个是老数据的图不显示,另一个是图片点击预览只显示一部分加载不全.之所以诡异是所有设备都没问 ...
- MongoDB数据库 5分钟快速上手
安装 本次安装使用docker镜像,安装无障碍,一行命令即可解决 # 安装镜像并启动 可以自行修改命令中的参数 ## 账户 tanoak 密码 123123 ## -p 27018:27017 映射端 ...
- Raspberry Pi:树莓派安装Kali2021新版本
准备材料 树莓派4B kali系统镜像 SDFormatter (格式化工具) Win32DiskImager (镜像拷录工具) 镜像下载 kali下载地址:https://www.offensive ...
- buu crypto 凯撒?替换?呵呵!
一. 以为是简单的凯撒加密,但是分析Ascill表,发现毫无规律,意味着要爆破出所有可能.只能用在线工具来弄了,脚本是不可能写的(狗头) 找到了,但是提交不成功,需要变成小写,用脚本转换一下,同时很坑 ...
- 使用Octotree插件在Edge上以树形结构浏览GitHub上的源码
先预览效果左侧的目录通过点击,就可以到达对应的源码位置. 首先点击打开Edge中的浏览器扩展在右上角...=>点击扩展=>点击获取Microsoft Edge扩展按钮=>在左侧搜索所 ...
- 【分布式】CAP理论及其应用
CAP Theorem CAP 指的就是 "consistency 一致性","availability 可用性" "partition-tolera ...
- 简单DOS命令
1.nslookup命令 nslookup命令是用来解析域名的,举个例子:我们只知道百度的域名是www.baidu.com 想要知道它的ip的话就要使用nslookup命令了nslookup www. ...
- 构造函数 析构函数的区别与联系 C#
构造函数 __construct:是在对象被创建是自动调用的方法,用来完成初始化操作 构造函数有以下特点:1.构造函数的名字必须与类名相同:2.构造函数可以有任意类型的参数,但不能具有返回类型:3.定 ...
- 小猿圈-IT自学人的小圈子 【强力推荐学习】
笔记链接 https://book.apeland.cn/details/322/ 学习视频 https://www.apeland.cn/python