标准库模型vector表示对象的集合,其中所有对象的类型都相同。集合中每个对象都有一个与之对应索引,索引用于访问对象。
注:vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型,如vector< int>
定义
vector<vector >其实就是容器嵌套容器, 外层容器的元素类型是 vector ,内层容器的元素类型是 int型;
vector<vector<int> > A; //正确的定义方式,后面的尖括号前要加上空格
vector<vector<int>> A; //c++11之前这样定义是错误的,c++11之后支持这种定义方式
长度
//vector<vector<int> >A中的vector元素的个数
len = A.size();
//vector<vector<int> >A中第i个vector元素的长度
len = A[i].size();
访问某元素
A[row][col] : 访问某元素时,方法和二维数组相同
printf("%d\n", A[1][2]);
vector二维数组的赋值
这里有两种方法对vector< vector< int>>进行赋值:
1、采用vector模板中的方法push_back()
#include<iostream>
#include<vector>
using namespace std;
int main()
{
//array用来保存一个3*3的二维数组,array的每个元素都是vector<int>类型
vector <vector<int> >array;
std::vector<int> v;
for (int i = 0; i <3; i++){
for (int j = 0; j <3; j++){
int value;
cin >> value;
v.push_back(value);
}
array.push_back(v); //保存array的每个元素
v.clear();
}
for (int i = 0; i <array.size(); i++)
{
for (int j = 0; j <3; j++)
cout <<array[i][j];
cout<<endl;
}
return 0;
}
2、用分配空间的resize()函数
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector <vector<int> >array(3);//首先给array开辟了三个空间
for (int i = 0; i <3; i++){
array[i].resize(3);//给array中每个元素开辟了三个空间
for (int j = 0; j <3; j++){
cin >> array[i][j];//直接对开辟的空间赋值即可
}
}
for (int i = 0; i <array.size(); i++)
{
for (int j = 0; j <3; j++)
cout <<array[i][j];
cout<<endl;
}
cout << array.size();
return 0;
}
vector二维数组的遍历
vector中二维数组的遍历有两种方法:
1.迭代器遍历
void reverse_iterator(vector<vector<int>> vec)
{
vector<int>::iterator it;
vector<vector<int>>::iterator iter;
vector<int> vec_tmp;
cout << "Use iterator : " << endl;
for(iter = vec.begin(); iter != vec.end(); iter++)
{
vec_tmp = *iter;
for(it = vec_tmp.begin(); it != vec_tmp.end(); it++)
cout << *it << " ";
cout << endl;
}
}
或
vector<vector<int>> points = { {1, 3},{2, 6},{3,7} };
for (vector<vector<int>>::iterator it = points.begin(); it != points.end(); it++)
{
for (vector<int>::iterator itit = (*it).begin(); itit != (*it).end(); itit++)
{
cout << *itit << ends;
}
}
2.下标遍历
void reverse_index(vector<vector<int>> vec)
{
int i,j;
cout << "Use index : " << endl;
for (i = 0; i < vec.size(); i++)
{
for(j = 0; j < vec[i].size(); j++)
cout << vec[i][j] << " ";
cout << endl;
}
}