以不同的方式在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 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

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

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, 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

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 vector
1 2 3
5 6 7
8 9 3