簡體   English   中英

C ++ 11遍歷鋸齒數組?

[英]C++11 iterate over jagged array?

我正在嘗試初始化一個鋸齒狀的數組。 為什么這樣不起作用:

int *arr[10];
for (int *row : arr)
    row = new int[10];

它運行,但是arr不可讀。

在這種情況下,如何正確使用這種形式的“ for”?

否則,我如何才能初始化一個由X行組成的鋸齒狀數組,每行都是Y個元素,並將其全部設置為零?

嘗試:

int* arr[10];
for (int*& row : arr)
    row = new int[10];

由於要在循環內更改數組中的值,因此需要遍歷引用而不是值(它們只是數組中內容的副本)。 這與函數調用語義非常相似。

for(auto&row:arr)      // note the &. also note the auto
  row = new int[10];

編譯器應該真正警告這個愚蠢的錯誤。 發生過很多次

filmor提供的答案是正確的,但正如其他人在評論中已經指出的那樣:如果您真的想學習C ++ 11,則應使用諸如std::vector類的容器。

例如:

std::vector<std::vector<int>> list;

這樣就完成了。 您可以根據需要添加任意多個int 如果您希望具有固定大小的動態int列表,請考慮使用std::array

std::array<std::vector<int>, 10> arr;

盡管如果性能或內存不是問題,我總是建議使用std::vector 無論如何,您必須確保不超過最大元素數。

關於for -loop,我將始終嘗試以這種方式使用它:

for (auto &item : list)

如果您不想修改列表,請添加const

for (const auto &item : list)

即使您不想修改列表,也不會在進行列表復制時進行復制。

暫無
暫無

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

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