[C++, CPP] 進階資料型態
多維陣列(Multidimensional Array)
- 二維陣列(Two-Dimensional Array)
- [列數][行數]=[n][m]相當於n個一維陣列,每個一維陣列含m個元素
- 陣列在記憶體的儲存方式可分為以列為主(Row Major)或以行為主(Column Major)
- Row Major:要求第i列第j行的位址,可用下列公式
- mulArray[i][j] 的位址 = 起始位址 + (單位元素大小) × [ j × m + i]
-
int mulArray[3][5];
- 二維陣列宣告:
- 宣告:
- 型態 名稱[列數][行數];
- 宣告並以固定值初始化陣列:
- 型態 名稱[列數][行數] = { {值11,值12,..}, ... {值n1,值n2,..} };
- 宣告並以0初始化陣列:
- 型態 名稱[列數][行數] = { };
- 型態 名稱[列數][行數] = { 0 };
- 宣告並給每個元素各別的初始值:
- 型態 名稱[列數][行數] = {{值11, 值21,...}, {值21, 值22,...}, {值n1, 值n2,...}};
- 型態 名稱[ ][行數 ] = {{值11, 值21,...}, {值21, 值22,...}, {值n1, 值n2,...}};
- 宣告:
- 存取二維陣列:
- 名稱[索引1][索引2];
- 名稱[索引];
- 陣列大小計算
- 陣列大小:sizeof 陣列名稱
- 每列大小:sizeof 陣列名稱[0]
- 列數:sizeof 陣列名稱 / sizeof 陣列名稱[0]
- 行數:sizeof 陣列名稱[0] / sizeof 陣列名稱[0][0]
-
for(int i = 0; i < sizeof mulArray / sizeof mulArray[0]; i++) { for(int j = 0; i < sizeof mulArray[0]/ sizeof mulArray[0][0]; j++) cout << mulArray[i][j] << " "; cout << endl; }
- 二維陣列初始化
- 初始化:一個n列m行的二維陣列,相當於n個一維陣列,每個一維陣列含m個元素
-
int data[2][4] = { {1, 2, 3, 4}, {5, 6, 7, 8} };
-
- 若有省略初始值時,則會以0做初始化
-
int data[2][4] = { {1, 2 }, {5, 6, 7 } }; int data[0][4] = { {1, 2 }, {5, 6, 7 } };
-
- 若省略巢狀大括號,則會依記憶體儲存順序做初始化,未指派值的元素則自動以0初始化
-
int data[2][4] = {1, 2, 3, 4, 5}; int data[ ][4] = {1, 2, 3, 4, 5};
-
- 初始化:一個n列m行的二維陣列,相當於n個一維陣列,每個一維陣列含m個元素
- 二維字串陣列
- 用雙引號括住字串時,每個字串即代表一列,不需用大括號括住
- 多維陣列宣告時,若有指派初始值,則可省略第一個維度的大小,其餘維度不可省略
-
char myStrings[ ][50] ={ "Hello", "World", "C++", } cout << myStrings[0] + " " + myStrings[1]; //Hello World
- 多維陣列(Multidimensional Array)
- 一維陣列(One-Dimensional Array):變更一個索引值,就可參考到全部元素的陣列
- 型態 名稱[大小1]
- 多維陣列(Multidimensional Array):需要多個索引值才能參考到全部元素的陣列
- 型態 名稱[大小1][大小2]...[大小n]
- 多維陣列宣告時,若有指派初始值,則可省略第一個維度的大小,其餘維度不可省略
- 一維陣列(One-Dimensional Array):變更一個索引值,就可參考到全部元素的陣列