回覆列表
  • 1 # 使用者8602594914015

    很多情況下,是可以大致判斷出需要多大容量的。

    當不知道長度時,你需要的資料結構,叫動態變長陣列。下文簡稱為動態陣列。也就是C++中的std::vector。

    動態陣列的通常定義為

    這裡存放的是char型別,存其它型別同樣原理。

    其中,capacity表示容量,size表示實際有多少個數據。buf表示指向具體的記憶體。當capacity 為4,size為3時,這時再放一個char,還夠容量放。之後capacity和size都變為4。

    這時再需要放一個char, 就已經放不下了。就需要重新分配一個更大的記憶體區間。並且將之前的資料複製到新空間,再釋放掉舊的記憶體空間。通常的策略是將容量翻倍,從4擴大成8。

    這個分配新空間,複製資料,釋放舊空間的過程,可以用函式realloc完成。假如在當前位置上還可以擴大容量,realloc就直接在原地擴大記憶體空間,避免了複製資料的開銷。

    將動態陣列這個資料結構封裝好。外面就不用再關心具體的記憶體分配過程了,可以一直往裡面放資料。

    擴大capacity的策略通常是翻倍。逐漸升上去

    而很多情況下,是可以估計到一個最終容量的粗略值的(不用太準確)。動態陣列通常初始化時候,會有一個叫初始容量值的引數。這樣傳進去一個估計值,可以大大減少它重新分配空間的次數。

  • 中秋節和大豐收的關聯?
  • 生男生女最準的特徵是什麼?