簡體   English   中英

如何在C ++ 11標准中初始化動態大小的數組?

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

這是我的一段代碼。

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

這是編譯期間彈出的錯誤。

solution.cc:在函數'int main()'中:

solution.cc:13:33:error:數組必須用括號括起的初始值設定項初始化

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%2B%2B)#Overview

但我的代碼仍然會為類似的變體產生相同的錯誤。

有沒有辦法完全繞過初始化錯誤? 如果不是,則假設將值初始化為優選地相同的值。

我相信(恕我直言)你不是在尋找真正的問題。

你已經聲明了一個雙指針:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM