什么是向量容器

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

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

内部如何工作

在使用动态数组时,必须用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. Spring官方发布新成员:Spring GraphQL

    近日,在GraphQL Java诞生6周年的时候,Spring社区通过博客宣布正式创建全新项目:Spring GraphQL,同时还发布了这个新项目的里程碑1.0版本. 博客原文:https://sp ...

  2. xcopy应用于版本合并

    脚本 set src=C:\Users\cl\projectset dist=C:\Users\cl\projectxcopy %src% %dist% /y /e /exclude:exclude. ...

  3. hfctfwp(re)

    1.easy python revering 看字节码操作,昂哥直接看直接写exp太强了,我就直接手动写了个源码出来(昂哥永远滴神) arr0=[249,91,149,113,16,91,53,41, ...

  4. 全网唯一开源java开发的支持高扩展,高性能的Mqtt集群broker!

    SMQTT是一款开源的MQTT消息代理Broker, SMQTT基于Netty开发,底层采用Reactor3反应堆模型,支持单机部署,支持容器化部署,具备低延迟,高吞吐量,支持百万TCP连接,同时支持 ...

  5. Formily教程 | formily是中后台复杂场景的表单解决方案

    前言 formily 不是一个简单的前端轮子.Formily 是一个由阿里巴巴集团多 BU 共建的面向中后台复杂场景的表单解决方案,它也是一个表单框架.它的前身是供应链平台在 2019 年初对外开源的 ...

  6. Python如何设计面向对象的类(下)

    本文将在上篇文章二维向量Vector2d类的基础上,定义表示多维向量的Vector类. 第1版:兼容Vector2d类 代码如下: from array import array import rep ...

  7. Linux | 命令的参数

    命令的参数 格式:command parameters --> 命令参数 短参数 在短参数中,字母的大写效果是不同的,比如大写 T 和小写 t 的含义通常是不同的. 一个短参数 最常用的参数形式 ...

  8. 「CF585E」 Present for Vitalik the Philatelist

    「CF585E」 Present for Vitalik the Philatelist 传送门 我们可以考虑枚举 \(S'=S\cup\{x\}\),那么显然有 \(\gcd\{S'\}=1\). ...

  9. Java 给PDF签名时添加可信时间戳

    一.程序运行环境 编译环境:IntelliJ IDEA 所需测试文件:PDF..pfx数字证书及密钥.PDF Jar包(Free Spire.PDF for Java).签名图片(.png格式) 可信 ...

  10. C语言:小数(float double)

    小数分为整数部分和小数部分,它们由点号.分隔,例如 0.0.75.0.4.023.0.27.-937.198 -0.27 等都是合法的小数,这是最常见的小数形式,我们将它称为十进制形式.此外,小数也可 ...