概述:
Vecotor是一个动态容器,支持随时插入和删除操作。在内存中是连续存储的,因此访问迅速。并且可以存储多种数据类型:int、指针、对象…
1. 包含的头文件
#include <vector>
2. 初始化
常见的初始化方式包括一维数组和二维数组
(1)一维数组:
vector<int> a;
vector<string*> b;
vector<Base*> c;
vector<int> v(n);//长度为n的数组,初始值默认为0,idx=[0, n-1]
vector<int> v(n, 1);//v[0]到v[n-1]所有的元素初始值均为1
vector<int> a{1, 2, 3, 4, 5};//数组a中有五个元素,数组长度就为5
(2)二维数组:
vector<vector<int>>v;
3. 常用接口
成员函数 | 释义 |
---|---|
v.push_back(i) | 在尾部加一个数据,O(1) |
v.pop_back() | 删除最后一个数据,O(1) |
v.size() | 返回实际数据个数(unsigned类型),O(1) |
v.begin() | 返回首元素的迭代器(通俗来说就是地址)O(1) |
v.end() | 返回最后一个元素后一个位置的迭代器(地址)O(1) |
v.empty() | 判断是否为空,为空返回真,反之返回假 O(1) |
v.fornt() | 返回第一个数据,O(1) |
v.back() | 返回数组中的最后一个数据 ,O(1) |
v.clear() | 清除元素个数,O(N) |
v.resize(n,i) | 改变数组大小为n,n个空间数值赋为i,如果没有默认赋值为0 |
v.insert(it, x) | 向任意迭代器it插入一个元素x ,O(N) |
v.erase(first,last) | 删除[first,last)的所有元素,O(N) |
4. 迭代访问
4.1 一维数组
(1)下标法:和普通数组一样,一维数组的下标是从0到v.size()−1,访问之外的数会出现越界错误
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> v;
for(int i = 0; i < 10; i++){
v.push_back(i);
}
for(int i = 0; i < 10; i++){
cout << v[i] << " ";
}
return 0;
}
/*
output:
0 1 2 3 4 5 6 7 8 9
*/
(2)迭代器法:类似指针一样的访问,首先需要声明迭代器变量,和声明指针变量一样
#include <iostream>
#include <vector>
using namespace std;
int main(){
//迭代器,类似于指针
vector<int> v1{ 1,2,3,4,5,6,7,8,9,0};
vector<int>::iterator it;//声明了一个迭代器类型的变量it,类似于指针变量
for (it = v1.begin(); it != v1.end(); it++) {
cout << *it << " ";
//cout << *(it+1) << " "; v[i] 和 *(v.begin() + i) 等价
}
//智能指针auto
for (auto num : v1) {
cout << num << " ";
}
return 0;
}
/*
output:
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
*/
4.2 二维数组
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<vector<int>>v;
vector<int> v1{ 1,2,3,4 };
vector<int> v2{ 5,6,7,8 };
v.push_back(v1);
v.push_back(v2);
v.push_back({ 10,11,12,13 });
for (int i = 0; i < v.size(); i++) {
for (int j = 0; j < v[0].size(); j++) {
cout << v[i][j] << " ";
}
cout << endl;
}
return 0;
}
/*
output:
1 2 3 4
5 6 7 8
10 11 12 13
*/
参考:
https://wyqz.top/p/870124582.html
https://www.runoob.com/cplusplus/cpp-vector.html