簡體   English   中英

2D數組值C ++

[英]2D array values C++

我想聲明一個2D數組並為其賦值,而無需運行for循環。

我以為我可以使用以下想法

int array[5] = {1,2,3,4,5};

也可以很好地初始化2D數組。 但是顯然我的編譯器不喜歡這樣。

/*
 1   8  12  20  25
 5   9  13  24  26
*/

#include <iostream.h>

int main()
{
    int arr[2][5] = {0};   // This actually initializes everything to 0.
    arr [1] [] = {1,8,12,20,25}; // Line 11
    arr [2] [] = {5,9,13,24,26};
    return 0;
}

J:\\ CPP \\ Grid> bcc32.exe Grid.cpp

適用於Win32的Borland C ++ 5.5.1版權所有(c)1993,2000 Borland

Grid.cpp:

錯誤E2188 Grid.cpp 11:函數main()中的表達式語法

錯誤E2188 Grid.cpp 12:函數main()中的表達式語法

警告W8004 Grid.cpp 14:為'arr'分配了一個從未在函數main()中使用的值

* 2個編譯錯誤*

請幫助我用我的一組值初始化2d數組的正確方法是什么。

像這樣:

int main()
{
    int arr[2][5] =
    {
        {1,8,12,20,25},
        {5,9,13,24,26}
    };
}

這應該在您的C ++教科書中介紹:您使用的是哪本?

無論如何,最好考慮使用std::vector或某些現成的矩陣類(例如,來自Boost的類)。

在C或C ++中初始化多維數組的正確方法是

int arr[2][5] = {{1,8,12,20,25}, {5,9,13,24,26}};

如果需要,可以使用相同的技巧來初始化甚至更高維的數組。

另外,在初始代碼中要小心-您試圖在數組中使用1索引偏移量來對其進行初始化。 這沒有編譯,但是如果編譯的話會引起問題,因為C數組的索引為0!

只是要指出,您不需要指定數組的所有維。

編譯器可以“猜測”最左邊的尺寸。

#include <stdio.h>
int main(void) {
  int arr[][5] = {{1,2,3,4,5}, {5,6,7,8,9}, {6,5,4,3,2}};
  printf("sizeof arr is %d bytes\n", (int)sizeof arr);
  printf("number of elements: %d\n", (int)(sizeof arr/sizeof arr[0]));
  return 0;
}

int iArray[2][2] = {{1, 2}, {3, 4}};

將2D數組視為數組的數組。

一種選擇是將2D數組表示為1D數組。 這可以使按元素操作更加有效。 您可能應該將其包裝在一個也包含寬度和高度的類中。

另一種選擇是將2D數組表示為std::vector<std::vector<int> > 這將使您可以將STL的算法用於數組算術,並且向量還將為您處理內存管理。

暫無
暫無

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

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