vector<vector >后面的尖括号前面要加上空格,否则在有些编译器可能出现问题
1、定义二维vector
vector<vector<int> > pre;
访问二维vector的元素: 如果指定外层和内层向量的大小,就可用operator[]进行读和写;如果只指定外层向量大小,就能用push_back()函数进行写,不能用operator[]进行读和写。
- 创建m*n的二维vector:
vector<vector <int> >nums(m ,vector<int>(n)); //m*n的二维vector
定义了一个vector容器,元素类型为vector,初始化为包含m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0。
vector(n)表示构造一个无名且含n个0的vector对象。
- 动态创建m*n的二维vector
方法一:
vector<vector <int> > nums;
nums.resize(m);
for(int i=0;i<m;i++) nums[i].resize(n);
方法二:
vector<vector <int> > nums;
nums.resize(m,vector<int>(n));
- 初始化二维数组
vector<vector <int> > nums(m ,vector<int>(n,0)); //m*n的二维vector,所有元素为0
获得二维数组的行数:nums.size();
获得二维数组的列数:nums[0].size()
- 数组遍历
int m = nums.size(),n = nums[0].size();
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
cout<<nums[i][j]<<endl;
}
}
2、 vector< vector<int> > v(m, vector<int>(n) );
定义了一个vector容器,元素类型为vector,初始化为包含m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0。
从结果上看,类似于创建了一个m×n的二维数组,而且可以通过v[i][j]的方式来访问元素(vector支持下标访问元素)。
3、 vector< vector <int> > dp(m, vector<int>(n) )
vector<类型>标识符(最大容量,初始所有值)
vector< vector<int> > v(m, vector<int>(n) );
定义了一个vector容器,元素类型为vector,初始化为包含m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0。