首先解決第乙個問題。直接在原有的物理記憶體空間的基礎上追加空間,不現實。陣列特定的定址方式,物理空間必須連續,我們無法保證,其尾部總是留有足夠的空間供其擴充套件。
一種可行的方法是如上圖所示,申請乙個容量足夠大的陣列,並將原來陣列中的資料進行複製,此後便可以插入新元素e而不至於溢位。當然,原陣列所佔的空間要進行釋放交還作業系統。
擴容演算法
template
<
typename t>
void vector
::expand()
該程式的關鍵是,新陣列的容量總是取原陣列容量的兩倍,也正是第二個問題的答案。
縮容演算法
template
<
typename t>
void vector
::shrink()
注:函式體中上面兩行沒有看明白,若有小夥伴看到了,麻煩告知一下!!!感謝。
直接引用元素
使用訪問陣列的方式訪問向量,可以通過過載操作符進行過載。
template
<
typename t> t & vector
::operator
( rank r )
//過載下標操作符
// assert: 0 <= r < _size
c++中round()函式的用法
置亂演算法
template
<
typename t>
void
permute
(vector
& v)
區間治亂介面
順序查詢的演算法
template
<
typename t>
//無序向量的順序查詢:返回最後乙個元素e的位置;失敗時,返回lo - 1
rank vector
::find ( t const
& e, rank lo, rank hi )
const
注:while迴圈的條件自減什麼時候進行,這裡有點疑問。while迴圈的控制邏輯由兩部分組成,首先判斷是否已抵達萬用字元,再判斷當前元素與目標元素是否相等。得益於c/c++語言中邏輯表示式的短路求值特性,在前一判斷非真後迴圈會立即終止,而不致因試圖引用已越界的秩(-1) 而出錯。
插入演算法
template
<
typename t>
//將e作為秩為r元素插入
rank vector
::insert ( rank r, t const
& e )
區間刪除template
<
typename t>
int vector
::remove ( rank lo, rank hi )
單元素刪除template
<
typename t> t vector
::remove ( rank r )
程式
c++中find函式用法
template
<
typename t>
int vector
::deduplicate()
筆記 C 資料結構 1
集合有什麼用?集合 collection 類是專門用於資料儲存和檢索的類。資料結構 導言是 計算機儲存 組織 管理資料的方式。是 指相互之間存在 一種或多種 特定關係的資料元素的集合。第三節 造船術 下一章 從前,有一片大陸 c 語言系統 上面有 預定義 很多個民族 變數型別 有int族,float...
R語言 資料結構 向量1
向量是r語言的核心,向量的元素必須屬於某種資料型別,在乙個向量中元素必須是同一資料型別。向量是最基本的資料型別。如果乙個函式作用到向量上,那麼它作用到該向量的每個元素之上。x 5,by 0.5 以步長0.5從1至5建立向量 等差數列 建立times length x 個元素的向量 rep x,tim...
資料結構筆記1
資料結構中關於線形表的描述,因為剛開始學也當是對大學未學這門課的補充吧,決定仔細學。沒想到一學還真發現自己程式設計中不少問題。首先對教材的理解上,重新拾起c語言。發現對結構定義和使用上存在盲點。對指象結構的指標既然不知。所以對can通訊 一知半解。現在回想起來有茅塞頓開的感覺。對於c程式設計中涉及到...