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...