目录
前言:
如果你学过C语言你会发现:很多东西都需要我们去手动实现,不但会降低学习工作效率甚至还会出现错误。而在C++中我们引入了标准模板库,在其中封装了实用的容器。本篇文章将介绍vector
一、vector的概念以及使用教程:
1.引入:
如果你同时掌握或者了解Python和C++,提及顺序存储结构你会想到列表和数组。对于列表我们可能爱不释手:获取长度、插入元素、反转、删除元素这些常用的操作我们都可以再瞬息实现,仅仅从便捷性和对新手的友好性出发列表都是更好的。vector意译为向量,我觉得称其为变长数组是更加贴切的。它与Python中列表是很像的。
在使用每一个容器的时候我们都要在头文件中加入例如:
#include<iostream>
#include<vector>
2.定义:
我们首先来看如何定义一个vector,
vector<typename>name;
其中type为数据类型,可以是int、char、double、以及结构体类型等等。
name为该变长数组的名字。
特殊的有:我们在数据结构中图的存储方法中我们知道有邻接矩阵和邻接表两种方法来存储,我们对于邻接表一般情况使用链表来实现,我们也可以采用更好的方法:
vector<typename>Arrayname[arraysize];
3.访问vector的元素:
(1)通过下标访问:
与数组访问的方法相同:
name[i];其中i的范围为0到name.size()-1
(2)通过使用迭代器:
在C++中,vector
是一个动态数组,它提供了迭代器(iterator)来遍历和操作其中的元素。迭代器是一种通用的指针类型,可以用于访问容器中的元素,而不需要关心底层实现细节。
迭代器的基本概念
- 迭代器:类似于指针,但功能更强大,可以用于遍历容器中的元素。
- begin():返回指向容器第一个元素的迭代器。
- end():返回指向容器末尾(最后一个元素之后的位置)的迭代器。注意不是最后一个元素
案例 :
#include<iostream>
#include<vector>
using namespace std;
int main() {
vector<int>v1;//创建一个vector
for (int i = 0; i < 6; i++) {//初始化一个数组
v1.push_back(i);
}
vector<int>::iterator it = v1.begin();//利用函数began返回指向第一个元素的迭代器
for (int j = 0; j < 6; j++) {
printf("%d", *(it + j));
}
return 0;
}
4.常用的函数:
(1)push_back(x)函数:
在vector的末尾加入一个元素。时间复杂度为O(1);
(2)pop_back()函数:
将vector的末尾元素删除。时间复杂度为O(1);
(3)size函数:
获取vector的长度。时间复杂度为O(1);
(4)clear()函数:
清空vector的所有元素,时间复杂度为O(N);
(5)insert(it,x)函数:
向vector的迭代器it处插入一个元素x,时间复杂度为O(N);
(6)erase()函数:
①删除单个元素:erase(it)。删除指定迭代器it位置的元素。
②删除一个区间内的元素:erase(first,last)。删除区间[first,last)注意是左闭右开的区间。
#include<iostream>
#include<vector>
using namespace std;
int main() {
vector<int>v1;//创建一个vector
for (int i = 0; i < 9; i++) {//初始化一个数组
v1.push_back(i);
}
v1.erase(v1.begin() + 3, v1.begin() + 6);//注意左闭右开区间!
vector<int>::iterator it = v1.begin();//利用函数began返回指向第一个元素的迭代器
for (int j = 0; j < v1.size(); j++) {
printf("%d", *(it + j));
}
return 0;
}
二、11月3日补充利用vector创建二维数组:
vector<vector<int>> matrix;//定义
// 获取用户输入的行数和列数
int rows, cols;
cout << "Enter the number of rows: ";
cin >> rows;
cout << "Enter the number of columns: ";
cin >> cols;
// 调整二维向量的大小
matrix.resize(rows);
for (int i = 0; i < rows; ++i) {
matrix[i].resize(cols);
}