C++基礎 學習筆記六:復合型別之陣列
什么是陣列
陣列是有序的元素序列,是用于儲存多個相同型別資料的集合,
陣列的定義
1. 宣告公式(一維)
1. 靜態陣列
typeName arrayName[arraySize];
2. 動態陣列
typeName* arrayName = new typeName[arraySize];
2. 關于陣列的名詞解釋
-
陣列名
將有包含有限個型別相同的變數的集合命名,那么這個集合的名稱為陣列名,
-
元素
組成陣列的各個變數稱為陣列的元素,
-
下標
陣列的元素從第一個編號為0,依次往后按自然數序列排序,陣列的各個元素的數字編號稱為下標,
-
長度
陣列所包含的所有元素的數量稱為陣列的長度,
-
大小
元素的大小 * 陣列的長度 = 陣列的大小
-
前驅
在長度為n的陣列中
對于任何
0 ≤ i < j < n,A[i]都是A[j]的前驅(predecessor),特別地,對于任何
1 ≤ i,A[i - 1]稱作A[i]的直接前驅(intermediate predecessor), -
后繼
在長度為n的陣列中
對于任何
0 ≤ i < j < n,A[j]都是A[i]的后繼(successor),特別地,對于任何
i ≤ (n-2),A[i + 1]稱作A[i]的直接后繼(intermediate successor), -
前綴
任一元素的所有前驅構成其前綴(prefix),
-
后綴
任一元素的所有后繼構成其后綴(suffix),
-
物理地址
對于一維陣列
A[n],每個元素占用s個單位的空間,則元素A[i]對應的物理地址為:A + i * s,
陣列的宣告、初始化與釋放
1. 宣告
1. 一維陣列
-
靜態陣列
int s_1dArray[2]; -
動態陣列
int* d_1dArray = new int[2];
2. 二維陣列
-
靜態陣列
int s_2dArray[2][3]; -
動態陣列
int** d_2dArray = new int*[2]; for(int i = 0; i < 2; i++) d_2dArray[i] = new int[3];
3. 三維陣列
-
靜態陣列
int s_3dArray[2][3][4]; -
動態陣列
int*** d_3dArray = new int**[2]; for(int i = 0; i < 2; i++) { d_3dArray[i] = new int*[3]; for(int j = 0; j < 3; j++) d_3dArray[i][j] = new int[4]; }
關于宣告
-
靜態陣列
[]的值必須在編譯時是已知的,即不能為變數, -
動態陣列
[]的值可以是變數, -
特別的
[]中的值可以為0,
2. 初始化
1. 一維陣列
-
靜態陣列
int s_1dArray_inited[2] = {1,2}; -
動態陣列
int* d_1dArray_inited = new int[2]();
2. 二維陣列
-
靜態陣列
int s_2dArray_inited[2][3] = {{1,2,3},{4,5,6}}; -
動態陣列
int** d_2dArray_inited = new int*[2]; for(int i = 0; i < 2; i++) d_2dArray_inited[i] = new int[3]();
3. 三維陣列
-
靜態陣列
int s_3dArray_inited[2][3][4] = {{{1,2,3,4},{5,6,7,8},{9,10,11,12}}, {{12,11,10,9},{8,7,6,5},{4,3,2,1}}}; -
動態陣列
int*** d_3dArray_inited = new int**[2]; for(int i = 0; i < 2; i++) { d_3dArray_inited[i] = new int*[3]; for(int j = 0; j < 3; j++) d_3dArray_inited[i][j] = new int[4](); }
關于初始化
-
靜態陣列
如果不主動初始化那么基本型別陣列中的資料則是“臟資料”,但是全域變數和靜態變數系統會將元素初始化為指定型別的默認值,特別的型別別會呼叫默認的建構式,并且基本型別陣列若初始化串列為空則系統會將元素初始化為元素的默認值,
當在初始化的序列中,如果序列中的值的數目小于陣列的長度,那么剩余的元素會自動初始化為默認值,
-
動態陣列
如果不主動初始化那么陣列中的資料則是“臟資料”,
3. 釋放
1. 一維陣列
動態陣列
delete[] s_1dArray;
2. 二維陣列
動態陣列
for(int i = 0; i < 2; i++)
delete[] d_2dArray[i];
3. 三維陣列
動態陣列
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 3; j++)
delete[] d_3dArray[i][j];
}
關于釋放
-
靜態陣列
靜態陣列分配在記憶體的堆疊里,在函式執行完以后,靜態陣列會出堆疊銷毀,這是由系統自動完成的,
-
動態陣列
動態分配的記憶體在堆上,系統無法自動釋放堆上的記憶體,需要主動釋放,
陣列的使用例子
#include<iostream>
using namespace std;
int main()
{
int s_1dArray[2];
int* d_1dArray = new int[2];
int s_2dArray[2][3];
int** d_2dArray = new int*[2];
for(int i = 0; i < 2; i++)
d_2dArray[i] = new int[3];
int* s_3dArray[2][3][4];
int*** d_3dArray = new int**[2];
for(int i = 0; i < 2; i++)
{
d_3dArray[i] = new int*[3];
for(int j = 0; j < 3; j++)
d_3dArray[i][j] = new int[4];
}
delete[] s_1dArray;
for(int i = 0; i < 2; i++)
delete[] d_2dArray[i];
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 3; j++)
delete[] d_3dArray[i][j];
}
int s_1dArray_inited[2] = {1,2};
int* d_1dArray_inited = new int[2]();
int s_2dArray_inited[2][3] = {{1,2,3},{4,5,6}};
int** d_2dArray_inited = new int*[2];
for(int i = 0; i < 2; i++)
d_2dArray_inited[i] = new int[3]();
int s_3dArray_inited[2][3][4] = {{{1,2,3,4},{5,6,7,8},{9,10,11,12}},
{{12,11,10,9},{8,7,6,5},{4,3,2,1}}};
int*** d_3dArray_inited = new int**[2];
for(int i = 0; i < 2; i++)
{
d_3dArray_inited[i] = new int*[3];
for(int j = 0; j < 3; j++)
d_3dArray_inited[i][j] = new int[4]();
}
for(int i = 0; i < 2; i++)
cout << s_1dArray_inited[i] << " ";
cout << endl << endl;
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 3; j++)
cout << s_2dArray_inited[i][j] << " ";
cout << endl;
}
cout << endl;
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 3; j++)
{
for(int k = 0; k < 4; k++)
cout << s_3dArray_inited[i][j][k] << " ";
cout << endl;
}
}
return 0;
}
/* 運行結果為:
1 2
1 2 3
4 5 6
1 2 3 4
5 6 7 8
9 10 11 12
12 11 10 9
8 7 6 5
4 3 2 1
--------------------------------
Process exited after 0.5921 seconds with return value 0
請按任意鍵繼續. . .
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/33441.html
標籤:C++
上一篇:博弈--巴什博弈
