6.2.1.2. vector容器

序列式容器

1.常用的数据结构(容器)及分类:数组,链表,树,栈,队列.容器可以分为 序列式关联式 两种

2.序列式容器:序列式容器的元素排列的顺序与元素本身无关,其先后顺序由元素添加到容器中的顺序决定

3.常用的序列式容器:C++的STL(标准模板库),包括vector list queue dequeue(双向队列) stack priority_queue(优先队列)

注解

vector和数组的区别: 1.数组是静态的,长度不可改变,而vector可以动态扩展,增加长度 2.数组通常存储在栈区或者bss段,而vector中的数据则存储在堆上

vector容器以类模板vector<T> (T表示存储元素的类型)的形式定义在<vector>头文件中

6.2.1.2.1. 创建vector容器

#include <vector>

//此时这是一个空的vector容器,容器中没有元素,所以也没有分配空间.当添加一个元素(如push_back函数),vector会自动分配内存
std::vector<float> value;
//reserve函数可以增加容器的容量
value.reserve(20);
//创建容器并赋初始值
std::vector<int> primes {2, 4, 5, 8, 10};
//创建时指定个数, (){} 是有区别的,()指定数量,{}指定值
std::vector<int> values(20);
//创建容器,并全部赋值为1.5
std::vector<float> values(20, 1.5);

6.2.1.2.2. vector成员函数

函数成员

函数功能

begine()

返回指向容器中第一个元素的迭代器

end()

返回容器最后一个元素后面一个位置的迭代器

rbegin()

返回指向最后一个元素的迭代器

rend()

返回指向第一个元素前面一个位置的迭代器

cbegin()

相比begin()增加const属性,不能用于修改元素

cend()

crbegin()

crend()

size()

返回实际元素个数

max_size()

返回元素个数的最大值,这通常是一个很大的值,如2^32-1

resize()

改变实际元素的个数

capacity()

返回当前容量(内存)

empty()

判断容器中是否有元素,若无元素,返回true

reserve()

增加容器的容量

shrink_to_fit()

将内存减少到等于当前元素实际使用的大小

operator[]

重载了[]运算符,可以向访问数组中元素那样,通过下表访问vector中的值

at()

使用经过边界检查的索引反问元素

front()

返回第一个元素的引用

back()

返回最后一个元素的引用

data()

返回指向容器中第一个元素的指针

assign()

用新元素替换原有内容

push_back()

在序列的尾部添加一个元素

pop_back()

移除序列尾部的元素

insert()

在指定的位置插入一个或多个元素

erase()

移除一个或一段元素

clear()

移除所有元素,容器大小变为0

swap()

交换两个容器的所有元素