0
点赞
收藏
分享

微信扫一扫

C++中vector<vector<int> >的用法

一ke大白菜 2022-03-30 阅读 126

注意vector<vector<int> >后面的尖括号前面要加上空格,否则在有些编译器出现问题

vector<vector<int>> A;//错误的定义方式
vector<vector<int> > A;//正确的定义方式

一、为什么是vector?

对于数组,大家常用索引和指针来操作数组,给程序设计带来了很大的灵活性。但是数组的越界可能会引起程序的崩溃,而且动态性不好,包括动态改变大小,动态申请。有什么办法可以解决这些问题吗?
关于vector我不想多说,我假设大家都了解temlplate 和 STL。各位在任何一
学习C++的时候学到过STL(标准模板库)知道vector提供了operator[]函数。可以像数组一样的操作,而且还有边界检查,动态改变大小。vector本来就是可以用来代替一维数组的。
a. vector<vector<int> > array2(3);

   array2可以保存3个向量,向量的长度是可以改变的。array2[i]返回的是第i个向量。同理,array2[i][j]返回的是第i个向量中的第j个元素。
   vector<vector<int>  > array2(3);
   array2[1][2]=9;

我保证你的程序会segement failed,原因就是你没有指定向量的大小。用push_back函数可以解决问题,如下:

      for(int i=0;i<3;i++)
         array2[i].resize(3);//就定义了一个3X3的数组了(另一个3在 申明时定义的)。而且你可以随时改变它的大小

二、什么是vector?

向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型动态数组

1. 基本操作

(1) 头文件#include<vector>
(2) 创建vector对象:vector dp;
(3) 尾部插入数字:vec.push_back(a);
(4) 使用下标访问元素,cout<<dp[0]<<endl;记住下标是从0开始的。
(5) 使用迭代器访问元素.
vector::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
(6)插入元素: vec.insert(vec.begin()+i,a);在第i个元素后面插入a;
(7)删除元素: vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
(8)向量大小:vec.size();
(9)清空:vec.clear();//清空之后,vec.size()为0

2. 使用方法

2.1 插入元素

若想定义A = [[0,1,2],[3,4]],有两种方法。
2.1.1 定义vector B分别为[0,1,2]和[3,4],然后放入vector A。

vector<vector<int> > A;
vector<int> B;
B.push_back(0);
B.push_back(1);
B.push_back(2);
A.push_back(B);
B.clear();
B.push_back(3);
B.push_back(4);
A.push_back(B);

2.1.2
vector<vector > A;
for(int i = 0; i < 2; ++i) A.push_back(vector());
A[0].push_back(0);
A[0].push_back(1);
A[0].push_back(2);
A[1].push_back(3);
A[1].push_back(4);
1
2
3
4
5
6
7
3、长度

//vector<vector >A中的vector元素的个数
len = A.size();
//vector<vector >A中第i个vector元素的长度
len = A[i].size();
1
2
3
4
4、访问某元素

访问某元素时,方法和二维数组相同,例如:

//根据前面的插入,可知输出1。
printf("%d\n", A[0][1]);

3. vector& nums是什么意思?

1) int &nums:一个整型变量的引用
2) vector nums:nums是一个容器变量,容器名称为vector,容器内存的数据为int型
3) vector &nums:nums为一个引用,引用的内容是vector这个容器内部存放的整型数据

//1) 创建一维vector
vector<int> nums; //不指定长度
vector<int> nums(n); //指定长度 
//2) 添加元素
nums.push_back(1); //直接在末端添加元素1
//3) 删除元素
nums.resize(num.size-i); //删除后面i个元素
nums.pop_back(); //删除最后一个元素 
//4) 获取长度
nums.size();
//5) 判空
nums.empty();
举报

相关推荐

0 条评论