如何在c++ 11标准中初始化一个动态大小的数组

How to initialize a dynamically sized array in C++11 standard?

本文关键字:一个 动态 数组 c++ 标准 初始化      更新时间:2023-10-16

这是我的代码。

    int** n;
    for (int i = 0; i < N; ++i){
        int size;
        cin >> size;
        int* n[i] = new int[size]; //line 13
        for (int j = 0; j < size; ++j){
            cin >> n[i][j];
        }
    }

这是编译过程中弹出的错误。

解决方案。cc:在函数'int main()':

解决方案。Cc:13:33:错误:数组必须用大括号括起来的初始化式

初始化

int* n[i] = new int[size];

我意识到这可以使用向量来完成,因为它们在动态处理内存方面要好得多。但我不能在这个挑战中使用矢量。我唯一允许使用的标头是"iostream"

我读到,在c++ 11中,语法已经修改为new:

    p = new T [N] {initializer1, ..., initializerN};

来源:https://en.wikipedia.org/wiki/New_and_delete_ (C % 2 b % 2 b)

#概述

但是对于类似的变量,我的代码仍然产生相同的错误。

是否有办法完全绕过初始化错误?如果没有,则假设这些值初始化为相同的值。

我认为你没有看到真正的问题。

你声明了一个双指针:

int** n;
如果你忘了为指针数组分配内存,比如:
n = new int*[N]

在为数组的每个指针分配内存之前,这一步是必要的。

此外,我认为你的台词应该是:

n[i] = new int[size]

否则你是在重新声明n+i的类型。

这应该能解决你的问题。

int** n = new int*[N];
for (int i = 0; i < N; ++i){
    int size;
    cin >> size;
    n[i] = new int[size];
    for (int j = 0; j < size; ++j){
        cin >> n[i][j];
    }
}

帮自己一个忙,不要再使用原始指针了。只要有可能,就使用std::vector来代替原始数组——如下所示:

std::vector<std::vector<int>> n(N);
for (int i = 0; i < N; ++i){
    int size;
    cin >> size;
    n[i].resize(size);
    for (int j = 0; j < size; ++j){
        cin >> n[i][j];
    }
}