以不同的方式在C ++中初始化2D向量
先决条件:初始化一维向量
在讨论初始化技术之前,让我们先说明一下2D向量。简单来说,二维向量是具有行和列的矩阵。换句话说,2D向量是1D向量的向量,即,具有元素作为1D向量的向量。
那么2D数组的符号是什么?
vector <T> arr,其中T是vector <W>,其中W可以是任何数据类型,例如int,char等。
所以我们将2D整数向量定义为vector <vector <int >> arr
现在,让我们回到初始化2D向量的要点。
1)初始化一个空的2D向量,然后迭代推回1D数组
这是初始化2D向量的最幼稚的方法。首先,我们只定义一个空的2D向量。在那时,它尚不知道它将要包含多少个元素。然后,通过使用push_back()函数,我们可以根据需要简单地在背面添加一维向量。现在要添加一维向量,我们需要正确初始化该一维数组。
下面是一个根据用户需要添加元素的示例。
#include <bits/stdc++.h>using namespace std;
int main(){
//空的2Dvector初始化
vector<vector<int> > two_D_vector;
//下面是一个空的一维向量
vector<int> one_D_vector(5, 2);
//将上述一维矢量推回
//每次都清空2D向量
for (int i = 0; i < 5; i++) {
two_D_vector.push_back(one_D_vector);
}
//打印二维矢量
cout << "printing the 2D vector\n";
for (auto it : two_D_vector) {
//现在是一维向量
for (auto ij : it) {
cout << ij << " ";
}
cout << endl;
}
return 0;
}
输出:
printing the 2D vector2 2 2 2 2
2 2 2 2 2
2 2 2 2 2
2 2 2 2 2
2 2 2 2 2
2)用用户定义的大小初始化向量
我们也可以使用用户定义的大小来初始化2D向量。就像使用malloc()或new运算符创建2D动态数组一样。假设要初始化第n行和第m列的2D向量,那么我们需要使用m个1D向量的元素初始化n个大小为2D的向量。我们可以像下面那样进行操作,默认情况下,二维数组中的所有值都初始化为0。
如前 ,二维向量是一维向量的向量。因此,对于上层用例,让我们与一维矢量完全一样地思考。
因此,外部向量的大小为n(行数)
让我们定义一下
vector<T> arr(n);
现在T本身是一维向量,大小为m
因此,外部向量的元素将为vector <int>(m)
这种结合,
vector<vector<int>> arr(n, vector<int>(m))
#include <bits/stdc++.h>using namespace std;
int main(){
//n =行数
//m =没有列
//两者都将由用户定义
int n, m;
cout << "Enter number of rows, n\n";
cin >> n;
cout << "Enter number of columns, m\n";
cin >> m;
//用用户定义的大小初始化2D向量
vector<vector<int> > two_D_vector(n, vector<int>(m));
//默认情况下,所有值均为0-
//打印二维矢量
cout << "printing the 2D vector\n";
for (auto it : two_D_vector) {
//现在是一维向量
for (auto ij : it) {
cout << ij << " ";
}
cout << endl;
}
return 0;
}
输出:
Enter number of rows, n6
Enter number of columns, m
3
printing the 2D vector
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
3)使用用户定义的大小和用户定义的元素进行初始化
在这里,不是使用默认0进行初始化,而是使用用户定义的值进行初始化。该方法将类似于一维矢量的方法。
所以对于外部向量,
vector<T> arr(T,W)
其中,W是用户定义的元素。现在,这里的元素本身就是一维向量。
因此,示例如下所示,
代码1:
#include <bits/stdc++.h>using namespace std;
int main(){
//n =用户定义的行数
int n;
cout << "Enter number of rows, n\n";
cin >> n;
//用户定义的一维数组
vector<int> one_D_vector{ 1, 2, 3 };
//用用户定义的大小初始化2D向量,
//用户定义的元素
vector<vector<int> > two_D_vector(n, one_D_vector);
//打印二维矢量
cout << "printing the 2D vector\n";
for (auto it : two_D_vector) {
//现在是一维向量
for (auto ij : it) {
cout << ij << " ";
}
cout << endl;
}
return 0;
}
输出:
Enter number of rows, n5
printing the 2D vector
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
代码2:
#include <bits/stdc++.h>using namespace std;
int main(){
//n =用户定义的行数
int n, m;
cout << "Enter number of rows, n\n";
cin >> n;
//用户定义的一维数组
cout << "Define your 1D array which will be element\n";
vector<int> one_D_vector;
cout << "keep pushing numbers, press 0 to stop\n";
cin >> m;
while (m) {
one_D_vector.push_back(m);
cin >> m;
}
//2个Dvector用用户定义的大小初始化
//用户定义的元素
vector<vector<int> > two_D_vector(n, one_D_vector);
//打印二维矢量
cout << "printing the 2D vector\n";
for (auto it : two_D_vector) {
//现在是一维向量
for (auto ij : it) {
cout << ij << " ";
}
cout << endl;
}
return 0;
}
输出:
Define your 1D array which will be elementkeep pushing numbers, press 0 to stop
3 4 5 0
printing the 2D vector
3 4 5
3 4 5
3 4 5
3 4 5
3 4 5
4)用用户定义的元素初始化2D向量
我们还可以使用用户定义的元素初始化向量。语法为:
vector<vector<int>> two_D_vector{comma separated 1D elements};
示例如下:
#include <bits/stdc++.h>using namespace std;
int main(){
//用用户定义的元素初始化
vector<int> arr{ 1, 2, 3, 4, 5, -1, -2, 6 };
cout << "Printing the vector...\n";
for (auto i : arr)
cout << i << " ";
cout << endl;
return 0;
}
输出:
Printing the vector...1 2 3 4 5 -1 -2 6
5)用其他向量的元素初始化向量
我们还可以使用另一个向量的元素来初始化向量。该向量作为构造函数传递,以初始化新向量。这确实是一个深复制。
示例如下:
#include <bits/stdc++.h>using namespace std;
int main(){
//用用户初始化的2D向量
//仅元素
vector<vector<int> > two_D_vector{
{ 1, 2, 3 }, //逗号分隔列表
{ 5, 6, 7 },
{ 8, 9, 3 }
};
//打印二维矢量
cout << "printing the 2D vector\n";
for (auto it : two_D_vector) {
//现在是一维向量
for (auto ij : it) {
cout << ij << " ";
}
cout << endl;
}
return 0;
}
输出:
printing the 2D vector1 2 3
5 6 7
8 9 3
以上是 以不同的方式在C ++中初始化2D向量 的全部内容, 来源链接: utcz.com/z/334667.html