容器学习1——Vector容器的相关知识

标准库类型vector

vector的基本介绍

标准库类型vector表示对象的集合,其中所有对象的类型都相同,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引,索引用于访问对象,vector因为用于容纳对象,所以也通常称作容器,要使用vector,必须包含头文件#include<vector>
vector是一个类模板模板本身不是类或者函数,相反可以把模板看作是为编译器生成类或函数编写的一份说明,编译器根据模板创建类或者函数的过程称为实例化,当使用模板时,需要指出编译器应把类或函数实例化为何种类型,对于类模板来说,提供信息的方式总是这样:在模板名字后面跟一对尖括号<>,在括号内放上信息,例如:vector<int> itc。

vector是模板而并非类型,由vector生成的类型必须包含vector中元素的类型

vector能容纳绝大多数类型的对象作为其元素,但是引用不能是对象,所以不存在包含引用的vector,除此之外,其他绝大多数内置类型和类类型都可以作为vector的对象。

vector的定义和初始化

vector对象定义的常用方法:

  1. vector<T> v1 : v1是一个空的vector,它的潜在元素是T类型的,执行默认初始化
  2. vector<T> v2(v1): v2中包含有v1所有元素的副本
  3. vector<T> v2=v1:等价于(2),v2中包含v1所有元素的副本
  4. vector<T> v3(n,val):v3中包含了n个重复的元素,每个元素的值都为val
  5. vector<T> v4:(n): v4包含了n个重复地执行了值初始化的对象
  6. vector<T> v4(a,b,c……):v4包含了初始化值个数的元素,每个元素被赋予相应的初始值

补充:vector默认初始化时,vector为空,size的大小为0,不包含任何元素

列表初始化

C++11新标准还提供了另外一种为vector对象的初始化赋值的方法,即列表初始化,此时,用花括号括起来的0个或者多个初始值元素值被赋给vector对象

通常情况下,可以只提供vector对象容纳的元素数量而略去初始值,此时库会创建一个值初始化的元素初值,并把他赋给容器中的所有元素,这个初值由vector对象中元素类型决定

关于列表初始值还是元素数量

在某些情况下,初始化的真实含义依赖于传递初始值时用的是花括号还是圆括号。如果使用的是圆括号,则可以说是提供的值用来构造vector对象的,如果使用的是花括号,可以表述为我们想列表初始化该vector对象,当使用花括号的形式但是提供的值又不能用来列表初始化时,就要考虑用这样的值来构造vector对象了,如下面例子:
Alt
在上图中,我们定义了一个元素类型是string的vector对象,但是花括号中的int类型的值显然不能初始化string类型的对象,所以编译器会尝试使用默认初始值来初始化vector对象,在上图中,v4就被初始化为10个值为hi的元素

向vector对象中添加元素

一般来说,我们都是先创造一个空的vector对象,然后利用vector的成员函数push_back向其中添加元素,push_back负责把一个值当作vector对象的尾元素放到vector对象的尾端,如下图:
Alt
补充:C++标准要求vector在运行时高效快速的添加元素,因此如果vector对象中的元素值不同,更有效的方法就是先定义一个空的vector对象,然后再向其中添加元素

其他vector操作

vector支持的操作 含义
v.empty() 如果v中不含有元素,则返回真,否则返回假
v.size() 返回v中的元素个数
v.push_back(t) 向尾端添加值为t的元素
v[n] 返回v中第n个位置上元素的引用
v1=v2 用v2中的元素拷贝替换v1中的元素
v1={a,b,c……} 用列表中元素的拷贝替换v1中的元素

补充:vector对象(以及string对象)的下标运算符可用于访问已存在的元素,而不能用于添加元素,关于下标,只能明确一点的是:只能对确认已存在的元素执行下标操作,试图用下标的形式去访问一个不存在的元素将引发错误,不过这种错误编译器不会发现,而是等到执行的时候才会发现,如下图的运用就是错误的:

string s=" ";  //定义一个空的string类型的数据
int i=0;
s[i]="hello world";  //这样的用法是错误的,因为只能用下标操作符去访问已确认的元素,而不能去访问未知的元素
发布了37 篇原创文章 · 获赞 0 · 访问量 584

猜你喜欢

转载自blog.csdn.net/clearLB/article/details/104087980
今日推荐