C++ - STL - 序列式容器 - vector
2018-03-01 16:19
393 查看
所谓序列式容器,其元素呈线性关系排列,但未必有序。C++本身带了一种序列式容器array,STL提供了一些其他的序列式容器:vector, list, deque, stack, queue, priority-queue等。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/24f29f93b83194f1b9f4a1383ccbab44)
一、[b]Vector[/b]
使用vector需要头文件:include <vector>(一)[b]内存分配方式[/b]
Vector的存储方式和操作方式与array十分相似,区别是array是静态数组,需要分配指定大小的空间。Vector则不需要用户担心溢出和越界的问题,vector的空间分配是动态。(二)[b]迭代器[/b]
Vector与数组一样,其在内存中是一个连续的线性空间,所以一个普通的指针就能满足使用中的需求,如:operator*, operator->, operator++, operator+=等。1.[b]Vector的数据结构[/b]
Vector是连续线性空间,begin指向这段空间中第一个元素的位置,end指向超出末端的第一个位置,这两个指针标识了连续线性空间中以使用的范围。end_of_storage则指向连续线性空间的末尾。注意:容器的大小和容量的概念是不同的。容器的大小指已使用的存储空间的长度,而容量则表示已使用+未使用的空间长度。Size()的返回值为已使用的大小,capacity()的返回值为容量。2.[b]Vector的内存分配策略[/b]
以最小的代价连续存储元素。但是为了vector容器能快速的分配内存,实际分配的容量会比当前所需的空间多一些,vector预留的空间来存放新加入元素,这就避免每新加一个元素都会进行“找到更大的内存->复制数据->销毁旧空间”的步骤。注意:使用迭代器时,如果vector发生了扩容且引起了空间的重新分配,则所有的迭代器都会失效。3.[b]Vector的使用[/b]
(1)[b]声明及初始化[/b]
vector<int> a; //声明一个int型向量avector<int> a(10); //声明一个初始大小为10的向量vector<int> a(10, 1); //声明一个初始大小为10且初始值都为1的向量 vector<int> b(a); //声明并用向量a初始化向量bvector<int> b(a.begin(), a.begin()+3); //将a向量中从第0个到第2个(共3个)作为向量b的初始值 int n[] = {1, 2, 3, 4, 5};vector<int> a(n, n+5); //将数组n的前5个元素作为向量a的初值vector<int> a(&n[1], &n[4]); //将n[1] - n[4]范围内的元素作为向量a的初值(2)[b]添加元素[/b]
vector<int> a;a.push_back(1); //在尾部加入一个数据a.push_back(2);a.pop_back(); //删除最后一个数据a.insert(a.begin(), 0); //在a.begin()之前加入0a.erase(a.begin()); //将a.begin()的元素删除a.erase(a.begin() + 1, a.end()); //将第二个元素以后的元素均删除(3)[b]判断是否为空[/b]
vector<int> a;if(a.empty()){ a.push_back(1);}(4)[b]遍历[/b]
vector<int> a;//像数组一样以下标访问 for(int i = 0; i < a.size(); i++){ cout << a[i];} //以迭代器访问vector<int>::iterator it;for(it=a.begin(); it!=a.end(); it++){ cout<<*it<<" " ;}(5)[b]排序[/b]
#include <algorithm> vector<int> a;sort(a.begin(), a.end());(6)[b]实现二维数组[/b]
vector<vector<int>> a(10, vector<int>(5)); //创建一个10行5列的int型二维数组 相当于a[10][5];相关文章推荐
- 【C++ STL】序列式容器Vector
- 算法小记(二)写 C++ 中STL容器中map 和 vector 遇到的问题
- C++之STL(三):迭代器类vector::iterator 和 vector::reverse_iterator 的实现、迭代器类型、常用的容器成员
- C++STL中vector容器的用法
- C++ STL入门教程(1)——vector(向量容器)的使用(附完整程序代码)
- [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
- c++ stl容器vector删除(erase),遍历等基本用法介绍及头文件
- c++几种常见STL容器比较和分析 hashmap, map, vector, list
- C++ STL--vector容器用法详解
- STL容器-序列式容器vector
- 从零开始学C++之STL(三):迭代器类vector::iterator 和 vector::reverse_iterator 的实现、迭代器类型、常用的容器成员
- C++ STL vector(向量容器)的使用(附完整程序代码)
- C++ stl vector 清空容器
- C++学习 STL之二:vector容器用法详解
- STL学习——STL中的序列式容器及适配器总结(vector、list、deque、stack、queue)
- C++ STL容器的使用方法(vector、queue、list、set、map)
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- C++ STL学习之三:序列式容器deque深入学习
- C++(STL)考点--容器(vector)
- [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)