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);

 

posted @   taohuaxiaochunfeng  阅读(157)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示

目录导航