1. 程式人生 > >Java和C++的數組比較

Java和C++的數組比較

每一個 sys 否則 system 計算 nds 獲取 個數 聲明數組

Java:
數組的定義:
如下兩種方式都可以:
int array[];
int[] array;

註意:數組在定義後,不能直接使用。必須在初始化後才能使用。
初始化有兩種方式:
1、靜態初始化:
int array[] = {2,3,4};

2、動態初始化:
array = new int[2];
array[0] = 0;
array[1] = 1;
array[2] = 2; // 這句話沒有語法錯誤,運行時會觸發異常:java.lang.ArrayIndexOutOfBoundsException

可以通過length獲取數組的長度:
System.out.println(array.length); // array.length將會返回2

註意:不能在[]中指定數組的大小。

二維數組:
int array[ ][ ] = { {1, 2}, {2, 3}, {4, 5} };

二維數組的長度計算如下:
System.out.println(array.length); // array.length返回3
System.out.println(array[1].length); // array[1].length返回2

二維數組中可以看作是數組的數組;第1維(維數從0開始)中不同的元素(一維數組)的長度可以不同:
int array[ ][ ] = { {1, 2}, {2, 3}, {4, 5, 6} };

System.out.println(array[0].length); // array[0].length返回2

System.out.println(array[1].length); // array[1].length返回2
System.out.println(array[2].length); // array[2].length返回3


C++:
聲明數組時要指定數組元素的數量:
int array[2];

聲明後,即可使用:
array[0] = 0;
array[1] = 1;
array[2] = 2; // 這句話沒有語法錯誤,運行時也沒有做任何檢查。後果不可預料,極度危險。

數組可以在聲明的同時初始化:
int array[2] = {0, 1}; // 若列表中元素的個數必須小於或等於聲明中的元素個數,否則,編譯會出錯。

可以省略聲明中的元素個數:
int array[] = {0, 1};

註意:int[] array是不符合語法的;int array[]也是不符合語法的(如果要這麽寫,那麽必須在聲明的同時進行初始化)。

獲取數組長度:
cout << sizeof(array) / sizeof(int);
或者:
cout << std::extent<decltype(array)>::value << endl;
decltype是C++11的特性;std::extent在頭文件type_traits中。

二維數組:
int array[3][2] = { {1, 2}, {2, 3}, {4, 5} };
只有第一維的長度可以省略:
int array[][2] = { {1, 2}, {2, 3}, {4, 5} };

數組必須是個方方正正的矩陣,第1維(維數從0開始)的每一個元素(一維數組)的長度必須相當。

對於上述二維數組:
cout << sizeof(array) / sizeof(int) << endl; // 返回6
cout << std::extent<decltype(array)>::value << endl; // 返回第0維的長度,3
cout << std::extent<decltype(array), 1>::value << endl; // 返回第1維的長度,2

註意:std::extent的聲明如下:
template<class T, unsigned N = 0>
struct extent;

Java和C++的數組比較