顺序容器之vector

最近因为需要,在看C++ primer,哇,感觉这本书真不错,讲的细而且到位,而且大量的练习题,不愧为C++学习的经典书籍。今天看了顺序容器方面的内容,现在汇报一下:

一、什么是vector

vector是C++标准模板库(STL)提供的一个容器,说容器可能有点抽象。简单点吧,学习C++我们都知道C++引入的一个最大的编程上的变化就是加入了面向对象的编程技术,表现在代码的编写上也就是增加了一个类,所以C++在刚提出来的时候是叫做 C WITH CLASS的。扯远了,回来吧。vector就是一个类,提供了一组依附于该类的操作函数。这样一来,我们在写代码的时候就可以调用这些函数为我们的项目服务,这样就省去了我们很多事情(STL,standard template library正是为此而设计的,关于STL,请参考http://en.wikipedia.org/wiki/Standard_Template_Library)

二、vector的使用

明白了vector是什么了,那么我们就想知道vector怎么用,下面就给大家介绍一下Vector的用法。

vector定义在STL中的vector头文件中,我们要使用vector,必须要把vector头文件括进来,即:

#include<vector>,这是第一步,然后我们就可以开始使用vector提供的各种操作了。vector提供操作如下:

 

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

构造函数:创建一个vector对象,功能相当于C语言中定义一个变量

vector<Elem> c; //创建一个空的vector对象,就相当于定义了一个int整形变量,没给赋值

vector<Elem> c1(c2);//c2为一个vector对象,用它来创建c1,相当于int i=j;j已经定义

vector<Elem> c(n);//创建一个vector容器,容量为n,即c里面可以放n个Elem类型的元素

vector<Elem> c(n,data);//创建一个vector,容量为n,n个元素的值都为data

vector<Elem> c(c1.begin(),c1.end());//相当于c=c1,c1调用两个函数返回的是一种新的数据类型:迭代器,有关迭代器,请参考:http://baike.baidu.com/view/1413849.htm

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

 

############################################################################################################

常见操作:

assign(first,last):用迭代器first,last所指定的元素取代向量元素

assign(num,val):用val的num份副本取代向量元素

at(n):等价于[]运算符,返回向量中位置n的元素,因其有越界检查,故比[]索引访问安全

front():返回向量中第一个元素的引用

back():返回向量中最后一个元素的引用

begin():返回向量中第一个元素的迭代器

end():返回向量中最后一个元素的下一个迭代器(仅作结束游标,不可解引用)

max_size():返回向量类型的最大容量(2^30-1=0x3FFFFFFF)

capacity():返回向量当前开辟的空间大小(<= max_size,与向量的动态内存分配策略相关)

size():返回向量中现有元素的个数(<=capacity)

clear():删除向量中所有元素

empty():如果向量为空,返回真

erase(start,end):删除迭代器start end所指定范围内的元素

erase(i):删除迭代器i所指向的元素

erase()返回指向删除的最后一个元素的下一位置的迭代器

insert(i,x);把x插入到迭代器i所指定的位置之前

insert(i,n,x):把x的n份副本插入到迭代器i所指定的位置之前

insert(i,start,end):把迭代器start和end所指定的范围内的值插入到迭代器i所指定的位置之前

push_back(x):把x推入(插入)到向量的尾部

 

pop_back():弹出(删除)向量最后一个元素

 

rbegin():返回一个反向迭代器,该迭代器指向的元素越过了向量中的最后一个元素

 

rend():返回一个反向迭代器,该迭代器指向向量中第一个元素

 

reverse():反转元素顺序

 

resize(n,x):把向量的大小改为n,新元素的初值赋为x

 

swap(vectorref):交换2个向量的内容

 

#############################################################################################

操作符重载函数:

operator()//返回容器中指定位置的元素,有关操作符重载函数请参考:http://baike.baidu.com/view/1033032.htm

析构函数:

~vector()//用于销毁vector对象占用的系统资源,更详细的析构函数介绍,请参考http://baike.baidu.com/view/1277985.htm

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

三、more about vector

1、vector是一种类似于数组的数据结构,确切的说应该是动态数组。在进行内存分配的时候必须是连续的一整块空间

2、我们知道数组是有固定长度,而vector没有,这也是我们称之为动态数组的原因。那么vector是怎么实现动态数组的呢,例如申请一个vector<int> vec(10);一个

空间大小为10的vector,那么当里面存满了10个元素了怎么办呢。办法是:重新分配一块更大的空间比如20,然后把10个数据拷贝过去,释放前面申请的10个元素的

空间

3、除此之外,在操作上他的很多特性跟数组一样,如上面的介绍,大家可以一一试一下

4、在vector中做insert操作,效率很低,除了在末尾插入以外。因为vector是连续的,每次插入一个,插入位置后面的元素都要向后移动,这样效率很低。所以vector不支持push_front操作。

5、删除操作同样效率很低

6、push_back操作很方便,有可能效率很低。

 

 

转载于:https://www.cnblogs.com/wangyichao/p/3347643.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用python数据分析panda学习笔记之Series

1 Series a&#xff1a;类似一维数组的对象&#xff0c;每一个数据与之相关的数据标签组成 b:生成的左边为索引&#xff0c;不指定则默认从0开始。 1 from pandas import Series,DataFrame 2 import pandas as pd 3 #series 一组数据与相关得数据标签组成 4 objSeries([4,7,-5…

12864 OLED屏显示日历

目录calendar.c测试程序效果普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 stdint.h见【51单片机快速入门指南】1&#xff1a;基础知识和工程创建 I2C版OLED驱动程序见【51单片机快速入门指南】4.2&#xff1a; SSD1306…

【笔记】iOS开发基础笔记二

1.block 2.didReceiveMemoryWarning 使用 3.HTTP&#xff0c;TCP&#xff0c;UDP 答&#xff1a;HTTP是应用层协议&#xff0c;定义的是传输数据的内容的规范HTTP协议中的数据是利用TCP协议传输的&#xff0c;所以支持HTTP也就一定支持TCP HTTP支持的是www服务 而TCP/IP是协议…

心得体会2-7

通过例题2-7&#xff0c;i1还是il的一次次反复错误导致难以运行&#xff0c;我懂得了输完程序并不只是盯着程序看&#xff0c;还应该看看例题中提示&#xff0c;真正明白表达式是什么意思。转载于:https://www.cnblogs.com/huangsilinlana/p/3349449.html

【动态规划】POJ-2229

一、题目 Description Farmer John commanded his cows to search for different sets of numbers that sum to a given number. The cows use only numbers that are an integer power of 2. Here are the possible sets of numbers that sum to 7: 1) 1111111 2) 111112 3) 1…

【联盛德W806上手笔记】二、GPIO

目录GPIO 控制器库函数函数参数宏极限翻转速度寄存器操作库函数操作测试main.cwm_it.cWindows 10 20H2 HLK-W806-V1.0-KIT WM_SDK_W806_v0.6.0 GPIO 控制器 摘自《W806 芯片设计指导书 V1.0》 可配置的 GPIO、软件控制的输入输出、硬件控制的输入输出、可配置中断方式。…

php 显示变量类型

echo "<br/> type ".gettype($my_data);

Java知多少(105)套接字(Socket)

网络应用模式主要有&#xff1a; 主机/终端模式&#xff1a;集中计算&#xff0c;集中管理&#xff1b;客户机/服务器&#xff08;Client/Server,简称C/S&#xff09;模式&#xff1a;分布计算&#xff0c;分布管理&#xff1b;浏览器/服务器模式&#xff1a;利用Internet跨平台…

fastq-dump 报错 解决方案

命令行&#xff1a; ~/sratoolkit/sratoolkit.2.3.2/bin/fastq-dump --split-spot --gzip xxxx.sra 报错信息: fastq-dump.2.3.2 err: name not found while resolving tree within virtual file system module - failed to open xxxx.sra 解决方法&#xff1a; 找不到xxx.sra&…

css格式化排版

body{ font-family:"宋体";} body{font-family:"Microsoft Yahei"&#xff0c;“微软雅黑”;} 2.文字排版--字号、颜色&#xff1a; body{ font-size:12px; color:#666;} 3.文字排版--粗体&#xff1a; p span{ font-weight:bold; } 4.文字排版--斜体&a…

【联盛德W806上手笔记】三、MCU系统与时钟结构

目录总线结构AHB-1 总线AHB-2 总线时钟与复位主要特性时钟结构功能描述时钟门控时钟自适应关断功能复位时钟分频寄存器描述寄存器列表软件时钟门控使能寄存器软件时钟掩码寄存器软件复位控制寄存器时钟分频配置寄存器调试控制寄存器I2S 时钟控制寄存器复位状态寄存器调试功能控…

datatables 搜索框 placeholder 属性

$(#table_id_example).DataTable({"fnPreDrawCallback": function( oSettings ) {$(.dataTables_filter input).attr({name:search,placeholder: 搜索站内新闻公告});//提示},language: {"sProcessing": "处理中...","sLengthMenu": &…

如何开发一个异常检测系统:如何评价一个异常检测算法

利用数值来评价一个异常检测算法的重要性 使用实数评价法很重要&#xff0c;当你用某个算法来开发一个具体的机器学习应用时&#xff0c;你常常需要做出很多决定&#xff0c;如选择什么样的特征等等&#xff0c;如果你能找到如何来评价算法&#xff0c;直接返回一个实数来告诉你…

计算机类产品评价技术指标体系研究之图形(像)篇

(一&#xff09;显卡对于核心的显卡来说&#xff0c;显存工作频率越高性能越好&#xff0c;而显存的ns数值越小的显存能跑更高的频率&#xff0c;所以显存的ns被认为是显卡选购的关键之一&#xff0c;另外就是显存的品牌。显卡和主板上都有“内存”&#xff0c;不过主板上的那种…

【联盛德W806上手笔记】四、PWM模块

目录PWM 控制器库函数函数参数宏测试程序独立模式main.cwm_hal_msp.cwm_it.c实验现象多通道同步模式main.cwm_hal_msp.cwm_it.c实验现象Windows 10 20H2 HLK-W806-V1.0-KIT WM_SDK_W806_v0.6.0 摘自《W806 芯片设计指导书 V1.0》、《W806 MCU 芯片规格书 V2.0》 PWM 控制器 5 …

C#中如何稳定精确地每隔5ms执行某个函数?

C#中如何稳定精确地每隔5ms执行某个函数&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「C#的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xf…

datatable 自定义搜索框 + 汉化

HTML <input type"text" id"my_news_search" class"" placeholder"搜索站内新闻"> <button class"" id"my_news_search_btn" type"button">搜索</button> JS <script>$(docu…

vlan

分割广播域1.物理分割&#xff08;路由器&#xff09;2.逻辑分割&#xff08;VLAN&#xff09;VLAN的优势&#xff1a;1.控制广播2.增强网络安全性3.简化管理VLAN的种类&#xff1a;1.静态VLAN&#xff1a;基于端口划分静态VLAN2.动态VLAN&#xff1a;基于MAC地址划分VLAN注&am…

【联盛德W806上手笔记】五、TIM定时器

目录定时器库函数函数参数宏Demo中的测试程序main.cwm_hal_msp.cwm_it.c实验现象Windows 10 20H2 HLK-W806-V1.0-KIT WM_SDK_W806_v0.6.0 摘自《W806 芯片设计指导书 V1.0》、《W806 MCU 芯片规格书 V2.0》 定时器 微秒与毫秒计时&#xff08;据时钟频率配置计数个数&#xff…