vector的使用
1、基本概念
vector是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector是C++STL的一个重要成员,使用它时需要包含头文件:
1 #include <vector>
构造函数与初始化:
vector的构造函数用来构造vector容器,函数原型为:
1 vector<T> v; // 使用模板类实现,使用默认构造函数 2 vector(v.begin(), v.end()); // 将v的元素拷贝 3 vector(n, elem); // 使用n个元素,值为elem 4 vector(const vector & vec); // 拷贝构造函数
初始化示例如下:
1 vector<int> a(10);//定义了10个整型元素的向量,但未给出初始值
2
3 vector<int>a(10,0);//定义了10个整型元素初始值为0
4
5 vector<int> a(b);//用b向量来创建a向量,整体复制性赋值
6
7 vector<int> a(b.begin(),b.begin()+3);//定义a中前三个元素为b中前三个元素
8
9 set<string> temp;
10 vector<string> a(temp.begin(),temp.end());//将temp中的元素赋值给a
11
12 int arr[]={1,2,3,4,5};
13 vector<int> res(arr,arr+5);
14
15 vector<int> res{1,2,3,4,5}
16
17 vector<int> arr{1,2,3,4,5};
18 vector<int> res;
19 res=arr;//
2、vector一些操作
(1)赋值操作
对vector容器进行赋值。函数原型为:
1 vector& operator=(const vector &vec); // 重载等号操作符
2 assign(begin,end); // 将另一个数组的元素赋值给当前vector
3 assign(n,elem); // 将N个elem赋值给当前vector
示例如下:
1 vector<int> v1={1,2,3,4,5};
2
3 vector<int> v2=v1;
4
5 vector<int> v3;
6 v3.assign(v1.begin(),v1.end());
7
8 vector<int> v4;
9 v4.assign(10,9); //元素为10个9
(2)插入元素
函数原型为:
1 v.push_back(val); // 尾部插入元素val
2 v.insert(const_intertor pos,val); // 在迭代器指向位置Pos插入val
3 v.insert(const_intertor,int count,int val); // 在迭代器指向位置插入count个val
示例如下:
1 vector<int> v1;
2 v1.push_back(10); // 元素值为10
3
4 v1.insert(v1.begin(),100); // 元素值为100,10
5
6 v1.insert(v1.begin(),2,200); // 元素值为200,200,100,10
(3)删除
函数原型为:
1 pop_back(); // 删除最后一个元素
2 erase(const_iterator pos); // 删除迭代器指向的元素
3 erase(const_iterator start,const_iterator end); // 删除[start,end)之间的元素
示例如下:
1 vector<int> v={1,2,3,4,5,6};
2
3 v.pop_back(); // 1,2,3,4,5
4 v.erase(v.begin()+2); // 1,2,4,5
5 v.erase(v.begin(),v.begin()+2); // 5,
(4) 数据存取
即获取vector中特定位置的数据。函数原型为:
1 at(int idx); // 获取索引idx位置的元素
2 operator[]; // 返回索引idx位置的元素
3 front(); // 返回容器中第一个元素
4 back(); // 返回容器中最后一个元素
示例如下:
1 vector<int> v={1,2,3,4,5,6};
2
3 cout<<v.at(3)<<endl; // 4
4 cout<<v[4]<<endl; // 5
5 cout<<v.front()<<endl; // 1
6 cout<<v.back()<<endl; // 6
(5)容器大小
1 empty(); // 判断容器是否为空,若为空,返回值为1,否则返回值为0
2 capacity(); // 容器的数量
3 size(); // 容器中元素的个数
4 resize(int num); // 重新指定容器的长度为num,若容器边长,则使用默认值0填充新位置,若容器变短,末尾超过容器长度的元素被删除
5 resize(int num,int val); // 重新指定容器的长度为num,若容器变长,使用val填充,若容器变短,末尾超出的元素被删除
示例如下:
1 vector<int> v={1,2,3,4,5,6};
2
3 cout<<v.empty()<<endl; // 0
4 cout<<v.capacity()<<endl; // 6
5 cout<<v.size()<<endl; // 6
6 v.resize(10); // 1,2,3,4,5,6,0,0,0,0
7 v.resize(12,20); // 1,2,3,4,5,6,0,0,0,0,20,20
(6) 交换vector元素
1 swap(vec); // 交换2个vector的元素
示例如下:
1 vector<int> v1={1,2,3,4,5,6};
2 vector<int> v2={6,6,6};
3
4 v1.swap(v2); // v1为6,6,6,v2为1,2,3,4,5,6
3、二维数组
二维数组只在初始化时有所区别,需要指明行列的值
1 vector<vector<int>>res(row,vector<int>(col,0)); // 初始化row*col数组,初始元素都为0
2
3 vector<vector<int>>res(row,vector<int>(col)); // 初始化row*col数组
4
5 vector<vector<int>> res;
6 res.size(r);
7 for(int i=0;i<r;i++)
8 res[i].resize(c);
4、其他应用和理解
1、return vector<int>{a, b};
1 class Solution {
2 public:
3 vector<int> twoSum(vector<int>& numbers, int target) {
4 int i=0;
5 int r = numbers.size()- 1;
6 int sum = 0 ;
7 while(i < r)
8 {
9 sum = numbers[i] + numbers[r];
10 if(sum == target) break;
11 if (sum < target) ++i;
12 else --r;
13 }
14 return vector<int>{i + 1, r + 1};
15
16 }
17 };
2、比较坑的这个,注意一下就OK了:
1 //v1中有n个值为i的元素
2 vector<int> v1(n,i);
3 //v2中只有n和i两个元素
4 vector<int> v2({n,i});
切记我们初始化的时候不能直接v1[i]=value,只能使用v1.push_back(i);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了