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() |
交换两个容器的所有元素 |