什么是向量容器

向量容器是一种支持高效的随机访问和高效的尾部插入新元素的容器。

向量容器一般实现为一个动态分配的数组,向量中的元素连续的存放在这个数组中,因此对向量容器进行随机访问具有和动态访问动态数组一样的效率。

内部如何工作

在使用动态数组时,必须用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 向量的更多相关文章

  1. 学习笔记之vector向量容器

    今天复习到vector向量容器,里面包括vector向量容器的一些优点以及具体的使用方法及代码,分享给大家. Vector向量容器不但能够像数组一样对元素进行随机访问,还可以在尾部插入元素,是一种简单 ...

  2. vector 向量容器用法祥解

    vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法:         ...

  3. STL --> vector向量

    vector向量 vector是一种对象实体,能够容纳许多其他类型相同的元素,因为又被称为容器. 头文件 在使用它时,需要包含头文件 <vector>. #include <vect ...

  4. vector向量容器(常用的使用方法总结)

    关于STL中vector容器的学习,编译运行后边看代码,边看执行结果效果更佳,还是想说看别人的代码一百遍,不如自己动手写一遍. vector向量容器不但能像数组一样对元素进行随机访问,还能随时在尾部插 ...

  5. vector向量容器

    vector向量容器不但可以像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单高效的容器,可以代替数组. vector具有内存自动管理的功能,对于元素的插入和删除,可以动态的调整所占内存. ...

  6. 标准模板库使用参考——vector向量容器

    C++的STL从广义上讲分为algorithm(算法),container(容器)和iterator(迭代器)三类,包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法. 在C++标准库中,ST ...

  7. java Vector向量

    9.3.4 Vector向量 [专业IT培训机构,真正零首付入学www.bjsxt.com] Vector底层是用数组实现的List,相关的方法都加了同步检查,因此“线程安全,效率低”. 比如,ind ...

  8. vector向量容器元素排序与查找

    1.利用标准库函数sort()对vector进行排序 参考源码: #include <algorithm> #include <vector> vector<int> ...

  9. C++STL之vector向量容器

    vector向量容器   vector向量容器不但能向数组一样对元素进行随机访问, 还能在尾部插入元素 vector具有内存自动管理的功能, 对于元素的插入和删除, 可动态调整所占的内存空间 vect ...

  10. c++中vector向量几种情况的总结(向量指针,指针的向量)

    1.标准库vector类型 vector 是同一种类型的对象的集合.每一个对象都有一个相应的整数索引值.标准库将负责管理与存储元素相关的内存.我们把 vector 称为容器,是由于它能够包括其它对象. ...

随机推荐

  1. 13、linux中用户和用户组

    linux是多用户多进程的系统: 每个文件和进程都需要应对一个用户和用户组: linux系统通过uid和gid来识别用户和组的: 一个用户必须要有唯一的uid和一个主组来识别身份,不同的用户可以使用同 ...

  2. C++实现二分法详解

    二分法是在一个排好序的序列(数组,链表等)中,不断收缩区间来进行目标值查找的一种算法,下面我们就来探究二分法使用的一些细节,以及常用的场景: 寻找一个数: 寻找左侧边界: 寻找右侧边界. 一.二分法的 ...

  3. hdu 1754 I Hate It 线段树 单点更新 区间最值

    线段树功能:update:单点更新 query:区间最值 #include <bits/stdc++.h> #define lson l, m, rt<<1 #define r ...

  4. 导入项目发现没得右边没得maven

    使用ctrl + shift+A点Add Maven Project 就行了 参考:https://www.cnblogs.com/Juff-code/p/13390356.html

  5. 第三章 - CPU缓存结构和java内存模型

    CPU 缓存结构原理 CPU 缓存结构 查看 cpu 缓存 速度比较 查看 cpu 缓存行 cpu 拿到的内存地址格式是这样的 CPU 缓存读 根据低位,计算在缓存中的索引 判断是否有效 0 去内存读 ...

  6. pip 下载时出现问题TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'

    我这里解决就是更新下载源,马德,中科的源居然不够快,我就只能换源了,一换就成功了 1.一次性(临时使用): 可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.ed ...

  7. Java实验项目二——二维数组实现九九乘法表

    Program:打印乘法口诀表 (1)编写一个方法,参数(二维数组),完成将二维数组中的数据按照行列显示的工作. (2)编写一个测试方法,给出99乘法表,放入到二维数组中,调用(1)中的方法,显示乘法 ...

  8. SoapUI Pro 最新版本和最新功能

    专为整个后端的端到端测试而构建 创建全面的端到端测试,以从API定义或实时端点验证API的整个工作流程.只需单击几下即可传递响应数据并添加断言-无需编码. 综合生成或配置数据 通过简单的数据驱动测试来 ...

  9. QT从入门到入土(三)——文件的读写操作

     引言 文件的读写是很多应用程序具有的功能,甚至某些应用程序就是围绕着某一种格式文件的处 理而开发的,所以文件读写是应用程序开发的一个基本功能. Qt 提供了两种读写纯文本文件的基本方法: 用 QFi ...

  10. 小刻也能看懂的Unraid系统使用手册:基础篇

    小刻也能看懂的Unraid系统使用手册 基础篇 Unraid系统简介 Unraid 的本体其实是 Linux,它主要安装在 NAS 和 All in One 服务器上,经常可以在 Linus 的视频里 ...