先决条件:初始化一维向量
在讨论初始化技术之前,让我们先说明一下2D向量。简单来说,二维向量是具有行和列的矩阵。换句话说,2D向量是1D向量的向量,即,具有元素作为1D向量的向量。
那么2D数组的符号是什么?
vector <T> arr,其中T是vector <W>,其中W可以是任何数据类型,例如int,char等。
所以我们将2D整数向量定义为vector <vector <int >> arr
现在,让我们回到初始化2D向量的要点。
这是初始化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 vector 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, n 6 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
在这里,不是使用默认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, n 5 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 element keep 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
我们还可以使用用户定义的元素初始化向量。语法为:
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
我们还可以使用另一个向量的元素来初始化向量。该向量作为构造函数传递,以初始化新向量。这确实是一个深复制。
示例如下:
#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 vector 1 2 3 5 6 7 8 9 3