对于vector<int>arr
,是指没有确定容量,这时候需要使用push_back函数进行输入
运行:
vector<int> v;
cout << v.size();
输出为:
0
输入方式:
vector<int>num;
for (int i = 0; i < n; i++) {
int nnum;
cin >> nnum;
num.push_back(nnum);
}
对于vector<int>arr(n)
,相当于vector<int>arr(n,0)
,也就是vector<int>arr(n,val)
,对一个确定容量n的动态数组arr的所有元素赋值0,也就是val。
如果这种情况再使用push_back,则数组不会发生变化,即插入不进去。
如果要使得位置0存储元素x,则只能使用v[0]=x,如果使用v.insert(x)插入变量x,那么v的第一个元素还是0,即v[0]=0,因为v.push_back(x)是将x插入到v[n],又因为声明v时,v最多能存储n个元素,即x根本没有成功插入容器v中。
运行:
vector<int> v(5);
cout << v.size() << endl;
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
cout << endl;
vector<int> w(5, -1);
for (int i = 0; i < w.size(); i++) {
cout << w[i] << " ";
}
输出为:
5
0 0 0 0 0
-1 -1 -1 -1 -1
对于vector<int>arr[n]
,可以理解为是二维数组,定义了一个长度为n的数组,数组的每个元素都是一个vector类型的变量。这个v[n]可以理解为一维长度是n,这个n需要是已知参数,才算一维长度不变,二维长度可变的矩阵。
运行:
vector<int> v[5];
v[0].push_back(-1);
cout << v[0].size() << " " << v[4].size() << endl;
cout << v[0][0];
输出为:
1 0
-1
1
2
如果想要定义一个两个维度都可变的矩阵,应该使用:vector<vector<int> > arr
两个箭头(>>)要分开写(> >), 避免和移位运算符混淆。
如何建立二维数组以及输入数据:
需要绕个弯,先建立一个二维数组vector<vector<int>> res;
for (int i = 0; i < N; ++i) {
vector<int> temp;
for (int j = 0; j < M; ++j) {
tmp.push_back(xxx);
}
res.push_back(tmp);
}
以及二维数组如何输入数据:
for(int i=0;i<n;i++){
vector<cood> cod;
for(int j=0;j<t;j++){
cood c;
int a1,a2;
cin>>a1>>a2;
c.x=a1;
c.y=a2;
cod.push_back(c);
}
int len = cod.size();
int flag[len] = {0};
for(int j=0;j<t;j++){
//要一行行的,不是arr[i][j].x
if(cod[j].x>=xl && cod[j].x<=xr && cod[j].y>=yd && cod[j].y<=yu){
flag[j] = 1;
}
}