[C++标准模板库:自修教程与参考手册]关于vector
什么是vector
可以这样认为,vector就是一个动态的数组,其中的元素必须具备assignable(可赋值)和copyable(可拷贝)两个性质。
vector的一些重要的性质
- vector支持随机存取,存取时间为O(1)。
- vector的迭代器是随机存取迭代器,所以所有的STL算法都可以使用。
- 在末尾添加元素时,vector的性能非常好(只要总的元素个数没超过capacity就行)。但是如果在中间或者前面插入元素,那么性能就不是那么好了,此元素的后面全部元素都要后移,即每一次移动都要执行assign赋值操作。
- 两个vector交换内容后,它们的容量也会交换。
- vector的第一个元素的索引为0,最后一个元素的索引为size()-1。
- 一个vector vec,它的一些操作:vec[x],vec.front(),vec.back()三个操作都不会检查元素是否存在,所以要我们自己进行判断该位置的元素存在与否。
vector的内存分配
vector的size表示当前拥有元素的个数,capacity表示vector最多能拥有多少个元素。如果size的大小超过了capacity,那么vector就会重新调用内存分配器分配新的内存。
vector的容量之所以有很大的重要性,是因为两个原因:
- 一旦内存重新分配,那么这个vetor的迭代器,引用,指针全都会失效。
- 内存重新分配非常耗费时间。
当然,也可以使用reserve()函数来保存适当的容量,避免不必要的内存配置:
std::vector<int> v;
//提前分配好100的容量
v.reserve(100);
当然,如果reserve()的参数中的数值比当前的capacity要小的话,那么不会有任何反应。
vector一些常用函数
std::vector<int> c;
//返回idx位置所在的元素,如果月结,就会跑出out_of_range异常
c.at(idx);
//返回索引idx所在的元素,不进行范围检查
c[idx];
//返回第一个元素。不检查第一个元素是否存在
c.front();
//返回最后一个元素,不检查最后一个元素是否存在
c.back();
//返回一个随机存取迭代器,指向第一个元素
c.begin();
//返回一个随机存取迭代器,指向最后一个元素
c.end();
//返回一个逆向迭代器,指向逆向迭代的第一元素
c.rbegin();
//返回一个逆向迭代器,指向逆向迭代的最后元素的下一个位置
c.rend();
//在pos位置上插入一个elem副本,并返回新元素的位置
c.insert(pos,elem);
//在pos位置上插入n个elem副本,无返回值。
c.insert(pos,n,elem);
//在pos位置上插入区间[beg:end]内所有元素的副本,无返回值
c.insert(pos,beg,end);
//在尾部添加一个elem副本
c.push_back();
//移除最后一个元素,但是不传回
c.pop_back();
//移除pos位置上的元素,返回下一个元素的位置
c.erase(pos);
//移除[beg,end]区间内的所有元素,返回下一元素的位置
c.erase(beg,end);
//将元素数量改为num,如果size()变大了,多出来的新元素都用默认构造函数完成
c.resize(num);
//将元素熟练改为num,如果size()变大了,多出来的新元素都是elem的副本
c.resize(num,elem);
//移除所有的元素,将容器清空
c.clear();
[C++标准模板库:自修教程与参考手册]关于vector的更多相关文章
- [C++标准模板库:自修教程与参考手册]关于deque
Deque的基本概念 deque和vector很相似,也提供随机存取的能力,将元素都动态地存储在一个数组中,最大的区别就是:deque的头和尾都是开放的,非常方便在头尾两端进行一些操作.(重点在于:d ...
- [C++标准模板库:自修教程与参考手册]关于auto_ptr
什么是auto_ptr指针 auto_ptr是这样一种指针:它是"它所指的对象"的拥有者,所以,当身为对象拥有者的auto_ptr指针被摧毁时,该对象也会被摧毁,auto_ptr要 ...
- STL 简介,标准模板库
这篇文章是关于C++语言的一个新的扩展--标准模板库的(Standard Template Library),也叫STL. 当我第一次打算写一篇关于STL的文章的时候,我不得不承认我当时低估了这个话 ...
- c++学习书籍推荐《数据结构C++语言描述:应用标准模板库STL(第2版)》下载
本书是Ford和Topp两位教授于1996看出版的名著Data Structures with C++的第2版,在全球范围内已经有数以万计的学生从中受益.作者将C++语言作为算法描述语言,应用包含规范 ...
- 7.4 C++标准模板库(STL)的概念
参考:http://www.weixueyuan.net/view/6401.html 总结: 标准模板库为C++提供了完善的数据结构及算法. 标准模板库包括三部分:容器.算法和迭代器. 容器是对象 ...
- 如何导出标准模板库(STL)类的实例化和包含STL类对象数据成员的类
本文翻译自 https://support.microsoft.com/zh-cn/help/168958/how-to-export-an-instantiation-of-a-standard-t ...
- C++标准模板库(STL)和容器
1.什么是标准模板库(STL)? (1)C++标准模板库与C++标准库的关系 C++标准模板库其实属于C++标准库的一部分,C++标准模板库主要是定义了标准模板的定义与声明,而这些模板主要都是 类模板 ...
- 标准模板库(STL)学习指南之sort排序
对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思 ...
- C++标准模板库Stand Template Library(STL)简介与STL string类
参考<21天学通C++>第15和16章节,在对宏和模板学习之后,开启对C++实现的标准模板类STL进行简介,同时介绍简单的string类.虽然前面对于vector.deque.list等进 ...
随机推荐
- .net core 配置跨域
使用场景: 由于浏览器的同源策略,即浏览器的安全功能,同源策略会阻止一个域的js脚本和另一个域的内容进行交互. 会出现以下报错: 怎样属于非同源呢? 协议.域名.端口号只要有一个不相同就是属于非同源 ...
- 想开发DAYU200,我教你
摘要:本文主要介绍OpenHarmony富设备DAYU200开发板的入门指导. 本文分享自华为云社区<DAYU200开发指导>,作者: 星辰27. 1 概述 DAYU200开发板属于Ope ...
- python 总是忘函数
sorted sorted()函数对所有可迭代对象进行操作,返回的是一个新列表:列表的list方法只对列表有效,且不生成新的列表. # 对成绩升序排列,名字降序排列 d1 = [{'name':'al ...
- 第一百零八篇:最常用的基本数据类型(Number,String类型)
好家伙, 1.Number类型 从名称中我们可以得出,这是一个存放数值的类型, 不同的数值类型相应地也有不同的数值字面量格式 number类型可以储存不同进制的数(不常用就是了) 八进制:在数前加一个 ...
- .Net SemaphoreSlim
看Elsa-core源代码中看到的,Elsa-core中所有保存数据的方法似乎使用同一个Save方法.如下图: 那么为什么要使用这玩意,我还是头一次见这玩意???? 好吧,我承认我自己菜.我自个儿也该 ...
- 系统内置APK并签名并配置AndroidStudio
前言 最近在集成内置APK的时候遇到了些问题,遂整理一份文档以记录. 一,APP内置进系统固件 将APK源码或编译出的apk文件放在package或vendor等目录下,并且编写相应的android, ...
- HDC2022的无障碍参会体验,手语服务是如何做到的?
华为开发者大会2022(HDC)上,HMS Core手语数字人以全新形象亮相,并在直播中完成了长达3个多小时的实时手语翻译,向线上线下超过一千万的观众提供了专业.实时.准确的手语翻译服务,为听障人士提 ...
- VBA驱动SAP GUI自动化:查找页面元素FindAllByName
我们在VBA中嵌入SAP原生的[脚本录制与回放]功能生成的VBS脚本,可以实现很多自动化操作.但只有我们对SAP做了一系列动作,才会得到这些动作的脚本.然而,一旦我们需要用代码提前做一些判断,然后再决 ...
- 各类数据库写入Webhsell总结
1.MySQL写入WebShell 1.1写入条件 数据库的当前用户为ROOT或拥有FILE权限: 知道网站目录的绝对路径: PHP的GPC参数为off状态: MySQL中的secure_file_p ...
- 【实时数仓】Day04-DWS层业务:DWS设计、访客宽表、商品主题宽表、流合并、地区主题表、FlinkSQL、关键词主题表、分词
一.DWS层与DWM设计 1.思路 之前已经进行分流 但只需要一些指标进行实时计算,将这些指标以主题宽表的形式输出 2.需求 访客.商品.地区.关键词四层的需求(可视化大屏展示.多维分析) 3.DWS ...