Как вернуть 2d вектор в C ++, все элементы которого 1 - PullRequest
2 голосов
/ 08 февраля 2020

Я новичок в C ++ и хочу создать двухмерный вектор, все элементы которого равны 1. Когда я запускаю свой код, компилятор ничего не возвращает!

#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

Ответы [ 2 ]

3 голосов
/ 08 февраля 2020

Функция 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));
}

I рекомендуем использовать второе решение.

Пожалуйста, попробуйте онлайн

2 голосов
/ 08 февраля 2020

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;
}

Конечно, вы можете объединить это в одну строку, но это легче понять, если разбить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...