如何在 C++ 中 return 一个二维向量,它的所有元素都是 1

How to return a 2d vector in C++ which all of its elements are 1

我是 C++ 的新手,我想创建一个二维向量,它的所有元素都是 1。当我 运行 我的代码时,编译器 returns 什么都没有!

#include <iostream>
#include <vector>

using namespace std;

vector<vector<double>> ones2d(int m, int n) {
    vector<vector<double>> vect;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++){
            vect[i][j] = 1;
        }
    }
    return vect;
}

int main(){
    vector<vector<double>> vect = ones2d(2,3);
    cout << vect[0][0] << endl;
}enter code here

vector<vector<double>> vect; 初始化一个空的向量向量(大小为 0),因此对其元素的任何访问都是越界的,这会导致未定义的行为。

获取具有某些默认值的 2D 向量的一种方法是:

vector<vector<double>> ones2d(int m, int n) {
    // Create vector of n doubles, all initialized to 1
    vector<double> dim1(n, 1); 

    // Create vector of vectors, containing m copies of dim1
    vector<vector<double>> res(dim, m); 

    return res;
}

当然你可以把它组合成一行,但分解起来更容易理解。

resize()函数用于将向量调整到指定大小。我们可以使用它来初始化具有给定默认值的 2d 向量:

std::vector<std::vector<double>> ones2d(int m, int n)
{
    const int default_value = 1;

    std::vector<std::vector<double>> vect(m);
    for (int i = 0; i < m; i++)
        vect[i].resize(n, default_value);

    return vect;
}

或者您可以使用填充构造函数来初始化一个 2d 向量:

std::vector<std::vector<double>> ones2d_2(int m, int n)
{
    const int default_value = 1;

    return std::vector<std::vector<double>>(m, std::vector<double>(n, default_value));
}

我推荐使用第二种解决方案。

请试一试online