動態陣列,擴充和縮小

2021-05-23 21:38:16 字數 1292 閱讀 2701

//首先是資料結構,size記錄使用的空間,alloc_size記錄分配的空間 data為指標的指標,為了靈活性,必須的。

struct _darray

;typedef struct _darray darray;

*     好的到了關鍵的地方了,在空間不足的時候,動態擴充容量,為了提高效率,

*一次擴充多個空間,在不夠用的時候,一次擴充為原來的1.5倍,

*計算公式為alloc_size = thiz->alloc_size + (thiz->alloc_size>>1) + min_pre_allocate_nr

*這樣就可以避免一些環境中沒有浮點運算,以及浮點運算可能造成的誤差~~最後那個數,是為了防止到了一定時候,分配過於頻繁

********************************************/

#define min_pre_allocate_nr 10

static ret darray_expand(darray* thiz, size_t need)

}return ((thiz->size + need) <= thiz->alloc_size) ? ret_ok : ret_fail;

}//插入函式,在某個下標插入,最多也就在當前陣列的末尾,會自動調整。

ret darray_insert(darray* thiz, size_t index, void* data)

thiz->data[cursor] = data;

thiz->size++;

ret = ret_ok;

}return ret;

}*     壓縮陣列,在空閒的空間到了一定的數量的時候,就進行壓縮,

*當使用空間小於分配的空間的一半的時候,就將當前的空間縮小為1.5倍已使用的空間。

*計算公式為alloc_size = (thiz->size >>1) +thiz->size ,

*這樣就可以避免一些環境中沒有浮點運算,以及浮點運算可能造成的誤差~~thiz->alloc_size > min_pre_allocate_nr

*是為了防止到了一定時候,壓縮過於頻繁

static ret darray_shrink(darray* thiz)

}return ret_ok;

}//根據下標刪除某個元素,先刪,再定容。

ret darray_delete(darray* thiz, size_t index)

thiz->size--;

darray_shrink(thiz);

return ret_ok;

}

C 對C的擴充 動態陣列例子

從堆記憶體中獲取乙個整型陣列,賦值後並列印出來。include using namespace std void main 分配記憶體空間 for int i 0 i p i 0 cout output the array 0 i cout cout p 釋放記憶體空間 1.改進該程式,將動態分配陣...

第十六周專案4 動態陣列的擴充

檔名稱 main.cpp 完成日期 2014年12月14日 版本號 v1.0 問題描述 動態陣列擴充 輸入描述 乙個陣列,然後向其中加入新的元素 程式輸出 擴充後的陣列 include using namespace std int main int num,i,addnum num是小組人數 co...

C 擴充動態分配陣列的儲存空間

這裡直接示例 include include using namespace std intmain int argc,char ar 開闢一段更大的記憶體 int pointer newint 10 將原始記憶體的資料 拷貝到新的記憶體裡 memcpy pointer,p,sizeof int 5...