乙個動態陣列的例子C

2021-07-30 22:57:37 字數 1438 閱讀 7472

c/c++ 規定,陣列一旦定義後,它的長度就不能改變了;換句話說,陣列容量不能動態地增大或者減小。這樣的陣列稱為

靜態陣列(static array)

。靜態陣列有時候會給編碼**不便,我們可以通過自定義的 array 類來實現

動態陣列(dynamic array)

。所謂動態陣列,是指數組容量能夠在使用的過程中隨時增大或減小。

下面這段**雖然有點長,但它是乙個典型的使用異常的場景,請大家耐心閱讀。

#include #include using namespace std;

//自定義的異常型別

class outofrange;

outofrange(int len, int index): m_len(len), m_index(index), m_flag(2)

public:

void what() const; //獲取具體的錯誤資訊

private:

int m_flag; //不同的flag表示不同的錯誤

int m_len; //當前陣列的長度

int m_index; //當前使用的陣列下標

};void outofrange::what() const

return *(m_p + index);

}int array::push(int ele)

*(m_p + m_len) = ele;

m_len++;

return m_len-1;

}int array::pop()

m_len--;

return *(m_p + m_len);

}//列印陣列元素

void printarray(array &arr){

int len = arr.length();

//判斷陣列是否為空

if(len == 0){

cout<<"empty array! no elements to print."《執行結果:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

error: out of range( array length 10, access index 20 )

error: empty array, no elements to pop.

empty array! no elements to print.

array 類實現了動態陣列,它的主要思路是:在建立物件時預先分配出一定長度的記憶體(通過 malloc() 分配),記憶體不夠用時就再擴充套件記憶體(通過 realloc() 重新分配)。array 陣列只能在尾部乙個乙個地插入(通過 push() 插入)或刪除(通過 pop() 刪除)元素。

我們通過過載過的[ ]運算子來訪問陣列元素,如果下標過小或過大,就會丟擲異常(第53行**);在丟擲異常的同時,我們還記錄了當前陣列的長度和要訪問的下標。

(轉貼)乙個C 動態編譯的小例子

using system using system.codedom using system.codedom.compiler using system.reflection using microsoft.csharp namespace b c a,b,c string expressions ...

關於陣列的乙個例子

慶祝活動,現在a b c三條 要同時開始鳴放禮炮各21響。已知a艦每隔5秒鳴放一次,b艦每隔6秒鳴放一次,c艦每隔7秒鳴放一次。假設炮手對時間掌握的都很準,那麼總共聽到多少聲炮響?對於這個問題,可以使用陣列來解決。首先使用三個陣列分別存放a,b,c艦21響禮炮的鳴放時間點,這裡可以使用乙個for迴圈...

乙個oracle函式返回陣列的例子

create or replace type t ret table is table of varchar2 20 create or replace function f test var num in integer return t ret table is var out t ret ta...