什么是向量容器

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

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

内部如何工作

在使用动态数组时,必须用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. 26、linux下安装MongoDB

    26.1.MongoDB介绍: 1.什么是MongoDB: MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能. Mo ...

  2. 修改MySQL时区

    说明: 1.Windows版本暂无发现问题 2.CentOS-Docker版本需要修改时区 通过sql命令临时修改 mysql> set global time_zone = '+8:00'; ...

  3. SpringCloud:Zuul路由配置超时问题

    测试访问时长 修改下业务类,增加sleep休眠时长,以此查看Zuul的熔断 @GetMapping("/test1") public Object test1() { try { ...

  4. redis-cluster集群安装(windows)

    在此先奉上安装包(链接:https://pan.baidu.com/s/1QHYQPkYPuiRWhdj9APbjnw 提取码:jv8x ) 1. 安装ruby 下载 rubyinstaller-2. ...

  5. Redis的并发竞争问题,你用哪些方案来解决?

    Redis的并发竞争问题,主要是发生在并发写竞争. 考虑到redis没有像db中的sql语句,update val = val + 10 where ...,无法使用这种方式进行对数据的更新. 假如有 ...

  6. XCTF 3rd-GCTF-2017 hackme

    一.查壳的老生常谈了..2分的题目就不多bb了. 二..elf文件,拖入ida,直接查找字符串,找到对应的函数 三.直接分析: 这里讲道理我当时很懵逼,因为进去这个函数后,发现伪码非常复杂,这里困了挺 ...

  7. Linux从头学03:如何告诉 CPU,代码段、数据段、栈段在内存中什么位置?

    作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...

  8. ZSH主题

    All the current themes can be found in the themes/ directory in the oh-my-zsh distribution. See list ...

  9. SDN开发环境搭建以及Mininet编程

    一.实验内容 搭建如下网络拓扑,并熟悉相关指令.   二.搭建开发环境 2.1 开发环境搭建 2.1.1下载ubuntu镜像文件 镜像下载地址 https://www.ubuntu.com/downl ...

  10. Spring MVC中的M V C

    M→Model 模型 V→View 视图 C→Controller 控制器 也就是说一次交互由生到死(请求到相应) 需要经过 这三个层级 来完成 那么为什么这么设计 这么设计又有什么好处 我是这么认为 ...