2、定义vector数组:
上面这个定义其实相当于是一维数组 name[SIZE],只不过其长度可以根据需要进行变化。
和一维数组一样,这里的 typename 可以是任何基本类型,例如 int、double、 char、 结构体 等,也可以是STL标准容器,例如 vector、set、 queue 等。
//可以很容易联想到二维数组的定义,即其中一维是一个数组的数组。
vector<vector<typename> > name;
//c++11之前会将>>视为移位操作,所以要加空格> >
vector<typename> Arrayname[arraySize];
//例如:
vector<int> vi[100];
vector<vector<typename> > name;
两个维都可变长
vector<typename> Arrayname[arraySize];
一维长度已经固定为 arraySize,另一维才是“变长”的。
【定义】
要加一个空格。
vector<vector<int>> A;//错误的定义方式
vector<vector<int> > A;//正确的定义方式
【插入】
二维数组是我们假象的,其实是连续的内存地址。
现在若想定义A = [ [0,1,2] , [3,4,5] , [2,3,9] , [6,1,10] ],则:
//正确的插入方式
vector<vector<int> > A;
//A.push_back里必须是vector
vector<int> B;
B.push_back(0);
B.push_back(1);
B.push_back(2);
A.push_back(B);
B.clear(); //清空B
B.push_back(3);
B.push_back(4);
B.push_back(5);
A.push_back(B);
B.clear(); //清空B
B.push_back(2);
B.push_back(3);
B.push_back(9);
A.push_back(B);
B.clear(); //清空B
B.push_back(6);
B.push_back(1);
B.push_back(10);
A.push_back(B);
B.clear();
//错误的插入方式
vector<vector<int> > A;
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);
A[1].push_back(5);
A[2].push_back(2);
A[2].push_back(3);
A[2].push_back(9);
A[3].push_back(6);
A[3].push_back(1);
A[3].push_back(10);
【长度】
//vector<vector<int> >A中的vector元素的个数
len = A.size();
//vector<vector<int> >A中第i个vector元素的长度
len = A[i].size();
【访问某元素】
访问某元素时,方法和二维数组相同,例如:
//根据前面的插入,可知输出5
printf("%d\n", A[1][2]);
【排序】
一维向量的排序我们都会,可以自定义cmp函数或less/greater来告诉编译器我们想要的排序顺序。
#include<cstdio>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
int main()
{
//初始化
vector<int> v;
v.push_back(2);
v.push_back(0);
v.push_back(1);
v.push_back(5);
v.push_back(9);
//升序(默认) Ascending order
sort(v.begin(), v.end());
for(int i=0;i<v.size();i++)
printf("%d ",v[i]);
printf("\n");
//升序 Ascending order
sort(v.begin(), v.end(), less<int>());
for(int i=0;i<v.size();i++)
printf("%d ",v[i]);
printf("\n");
//降序 Descending order
sort(v.rbegin(), v.rend());
for(int i=0;i<v.size();i++)
printf("%d ",v[i]);
printf("\n");
//降序 Descending order
sort(v.begin(), v.end(), greater<int>());
for(int i=0;i<v.size();i++)
printf("%d ",v[i]);
printf("\n");
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/219e92e265f0b8b9dd4ac8efe13dd973.png)
如果是一个二维数组,也可以用sort,默认的是根据第一列来排序,当然我们可以重写cmp函数来根据其他列来排序:
A = [ [0,1,2] , [3,4,5] , [2,3,9] , [6,1,10] ]
#include<cstdio>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
int main()
{
//正确的插入方式
vector<vector<int> > A;
//A.push_back里必须是vector
vector<int> B;
B.push_back(0);
B.push_back(1);
B.push_back(2);
A.push_back(B);
B.clear(); //清空B
B.push_back(3);
B.push_back(4);
B.push_back(5);
A.push_back(B);
B.clear(); //清空B
B.push_back(2);
B.push_back(3);
B.push_back(9);
A.push_back(B);
B.clear(); //清空B
B.push_back(6);
B.push_back(1);
B.push_back(10);
A.push_back(B);
B.clear();
//按第一列升序,Ascending order by first column
sort(A.begin(), A.end());
for(int i=0;i<A.size();i++)
{
for(int j=0;j<A[i].size();j++)
printf("%d ",A[i][j]);
printf("\n");
}
printf("\n\n");
//按第一列降序,Descending order by first column
sort(A.rbegin(), A.rend());
for(int i=0;i<A.size();i++)
{
for(int j=0;j<A[i].size();j++)
printf("%d ",A[i][j]);
printf("\n");
}
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/5cb6b354872090f8d854193085d36392.png)
#include<cstdio>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
bool cmp1(const vector<int> &a, const vector<int> &b) {
return a[1] < b[1];
}
bool cmp2(const vector<int> &a, const vector<int> &b) {
return a[1] > b[1];
}
int main()
{
//正确的插入方式
vector<vector<int> > A;
//A.push_back里必须是vector
vector<int> B;
B.push_back(0);
B.push_back(1);
B.push_back(2);
A.push_back(B);
B.clear(); //清空B
B.push_back(3);
B.push_back(4);
B.push_back(5);
A.push_back(B);
B.clear(); //清空B
B.push_back(2);
B.push_back(3);
B.push_back(9);
A.push_back(B);
B.clear(); //清空B
B.push_back(6);
B.push_back(1);
B.push_back(10);
A.push_back(B);
B.clear();
//按第二列升序,Ascending order by second column
sort(A.begin(), A.end(), cmp1);
for(int i=0;i<A.size();i++)
{
for(int j=0;j<A[i].size();j++)
printf("%d ",A[i][j]);
printf("\n");
}
printf("\n\n");
//按第二列降序,Descending order by second column
sort(A.begin(), A.end(), cmp2);
for(int i=0;i<A.size();i++)
{
for(int j=0;j<A[i].size();j++)
printf("%d ",A[i][j]);
printf("\n");
}
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/00e9267c0dcfe4f4b4d762bafdff802e.png)