动态数组vector用法
2025-7-2 11:55:51
~1、vector
1.1介绍
- vector是STL容器中的一种常用的容器,和数组类似,由于其大小(size)可变,常用于数组大小不可知的情况下来替代数组。
- vector也是一种顺序容器,在内存中连续排列,因此可以通过下标快速访问,时间复杂度为O(1)。然而,连续排列也意味着大小固定,数据超过vector的预定值时vector将自动扩容。
1.2vector用法
1.2.1 创建
首先,使用vector时需要调用头文件
#include <vector>
vector的本质是模板,可以存储任何类型的数据。数组在声明前需要加上数据类型,而vector则通过模板参量设定类型。
vector<int> v1;
vector<char> v2;
vector<string> v3;
1.2.2初始化
vector<int> v1; //一个空数组
vector<int> v2{1,2,3,4,5}; //创建5个变量
vector<int> v3(5); //开辟5个空间,默认值为0
vector<int> v4(5,1); //开辟5个空间,初始值为1
vector<int> v5(v4); //把v4的值复制给v5
vector<int> v6(v4.begin(),v4.end()) //将v4的值从头开始到尾复制给v6
vector<int> v7(v4.rbegin(),v4.rend()) //将arr4的值从尾到头复制
注意:使用vector v1来进行初始化时,v1里此时并没有任何值,直接访问会报错。可以用v1.resize(num)或者v1.resize(n,num)来进行初始化
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.resize(3); // 将vec的大小改为3,移除最后的两个元素
for (int i : vec) {
std::cout << i << " ";
}
return 0;
}
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.resize(10, 100); // 将vec的大小改为10,新增加的元素被初始化为100
for (int i : vec) {
std::cout << i << " ";
}
return 0;
}
// 输出1 2 3 4 5 100 100 100 100 100
1.2.3访问
- 下标访问
vector<int> v1{1,2,3,4,5,6,7};
for (int i = 0; i < v1.size(); i++)
{
cout << v1[i] << ' ';
}
- 迭代器访问
vector<int> v1{1,2,3,4,5,6,7};
for (vector<int>::iterator it=v1.begin();it!=v1.end();it++)
{
cout << *it << ' ';
}
return 0;
- 范围for访问
vector<int> v1{1,2,3,4,5,6,7};
for (auto e : v1)
{
cout << e << ' ';
}
1.2.4增删改查
- 1.push_back和pop_back。通过push_back函数对容器进行尾插,pop_back函数对容器进行尾删。
int main()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.pop_back();
v1.pop_back();
v1.pop_back();
v1.pop_back();
return 0;
}
- 2.insert和erase。通过insert函数可以在所给迭代器位置插入一个或多个元素,通过erase函数可以删除所给迭代器位置的元素,或删除所给迭代器区间内的所有元素(左闭右开)。
int main()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.insert(v1.begin(), 10); //在容器开头插入10
v1.insert(v1.begin(),4,10); //在容器开头插入4个10
//此时v1为;10 10 10 10 10 1 2 3 4
v1.erase(v1.begin()); //删除容器一个数
v1.erase(v1.begin(), v1.begin() + 4); //删除在该迭代器区间内的元素(左闭右开,也就是0-3)
//此时v1为:1,2,3,4
return 0;
}
- 3.find函数
- find函数共三个参数,前两个参数确定一个迭代器区间(左闭右开),第三个参数确定所要寻找的值。
- find函数在所给迭代器区间寻找第一个匹配的元素,并返回它的迭代器,若未找到,则返回所给的第二个参数。
int main()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
vector<int>::iterator pos = find(v1.begin(), v1.end(), 2); //查找2所在的位置
v1.insert(pos, 10); //在2的位置前插入10
pos = find(v1.begin(), v1.end(), 10); //查找10所在的位置
v1.erase(pos); //删除10
return 0;
}
我们会审查剪贴板内容,并对发布不合适内容的同学进行相应的处理