程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 介紹一個模板動態數組

介紹一個模板動態數組

編輯:關於C++

本代碼提供對動態數組的支持,在內存中程序將數據分塊存放,避免了大塊內存的申請。同時,與普通的雙向鏈表不同,本代碼提供了對內部數據的快速索引,大大提高了數據訪問速度。本代碼提供C、C++兩個版本,可以任意使用、修改、傳播。下面是動態數組結構示意圖:

圖一

數據結構:

本模塊核心是一個對雙向鏈表的擴展,它通過一個可以指向任意數據類型的指針(在C語言版中是一個void *,在C++中是一個模板)實現了對任意數據類型的處理。鏈表中的節點中的data域是真正存放數組中數據的緩沖區的指針,該緩沖區的大小(必須是一個正整數)一個需要在程序開始時根據實際需要設定,例如目標數據量在0到100個左右,可以將它設成10等(設太小在添加數據時需要頻繁為數據分配空間,太大容易造成內存的浪費),這個時候如果數據量在51到60之間,鏈表中將包含6個數據節點。

數據接口:(以C++語言版為例)//******************************************
//   name:Add
//   function:添加數據
//   input: T newElement-新數據
//   return: 數據索引號
//   remark:
//******************************************
int Add(T newElement).
//******************************************
//   name:AddBatch
//   function:批量添加數據
//   input: T *pElement-源數組指針
//          int count-數組大小
//   return: BOOL TRUE-成功;FALSE-失敗
//   remark:
//******************************************
BOOL AddBatch(T *pElement,int count).
//******************************************
//   name:Copy
//   function:數據復制
//   input: CSArray & src-源動態數組
//   return:
//   remark: 使用前請先確保兩個對象有相同的數據類型
//******************************************
void Copy(CSArray &src ).
//******************************************
//   name:GetAt
//   function:獲取數組指定位置的數據
//   input: int index-指定位置
//   return: T 數據
//   remark:
//******************************************
T GetAt(int index).
//******************************************
//   name:GetPtAt
//   function:獲取數組指定位置的數據的指針
//   input: int index-指定位置
//   return: T 數據
//   remark: 提供對內部數據的直接訪問,小心使用!!
//******************************************
T *GetPtAt(int index).
//******************************************
//   name:GetSize
//   function:獲取數組的數據容量
//   input: 
//   return: int 數據容量
//   remark:
//******************************************
int GetSize().
//******************************************
//   name:SetAt
//   function:修改數組指定位置的數據
//   input: T newElement-新數據
//          int index-指定索引號
//   return: BOOL TURE-成功;FALSE-失敗
//   remark:
//******************************************
BOOL SetAt(int index,T &newElement).
//******************************************
//   name:InsertAt
//   function:在數組指定位置插入一個新數據
//   input: int index-指定索引號
//          T newElement-待插入的數據
//   return: BOOL TURE-成功;FALSE-失敗
//   remark: 本接口關系到大量數據的遷移,不推薦大量使用
//          算法還有待進一步優化
//******************************************
BOOL InsertAt(int index,T newElement).
//******************************************
//   name:RemoveAt
//   function:刪除數組中指定索引號中包含的數據
//   input: int index-指定索引號
//   return: BOOL TURE-成功;FALSE-失敗
//   remark: 本接口關系到大量數據的遷移,不推薦大量使用
//          算法還有待進一步優化
//******************************************
BOOL RemoveAt(int index)
//******************************************
//   name:RemoveAll()
//   function:清空對象中的數據
//   input: 
//   return: BOOL TURE-成功;FALSE-失敗
//   remark:
//******************************************
BOOL RemoveAll().
//******************************************
//   name:SetSize()
//   function:設置數據的容量
//   input: int size -數據的容量
//   return: BOOL TURE-成功;FALSE-失敗
//   remark:只允許擴大容量
//******************************************
BOOL SetSize(int size)
代碼下載

1、 C語言版(模擬C++的模板及面向對象方法):fteb_array.zip

2、 C++語言版:sarray.zip

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved