資料結構 向量 vector 陣列

2021-06-21 14:14:55 字數 1698 閱讀 4280

從今天我的資料結構就開始了,多少次開始又放棄,現在鼓起勇氣決定走到底。

我的內容是來自《資料結構與演算法分析 c++版》。

寫這些內容主要是為了回憶學過的內容,再次理解各種資料結構。

我的計畫是這樣的 按照書上的內容實現基本內容,熟悉各種優缺點,然後用一段時間去做習題。因為我發現書中的習題特別好!

注:向量的所有操作都是陣列實現的,vector可以再需要的時候講陣列大小擴大一倍(下面有實現),這樣就不需要估計陣列大小了;

向量的陣列的優缺點:

1、查詢某位置的的元素是o(1)階的,因為陣列嘛例如a[1];

2、插入元素的代價是巨大的,最壞的情況是插到最前面,需要將原陣列中的所有元素向後移動。o(n);

3、刪除一樣花費巨大。o(n);

4、對於插入刪除元素在末尾時,這種情況是讓人欣慰的o(1)。(所以文中實現了插入刪除尾端元素,而不實現插入中間或者前端(因為在我看來這種操作花費如此巨大實現了也沒有意義,如果需要我們可以用其他的資料結構來完成))。

c++學過已經許久了,關於後面的類等東西不用早就忘了,所以說剛開始寫的時候有一些吃力。在此多加一些注釋,等習慣了就好了。

應該先設定三個變數:

private:

int thesize;//用來指示當前的位置

int thecapacity;//用來表示陣列大小

object * objects;//乙個各型別的指標

然後就是建構函式和析構函式

public:

explicit vector(int initsize =0):thesize(initsize),thecapacity(initsize + spare_capacity)//spare_capacity 這是個值 在下文中提到 就是預設陣列最開始的大小

vector(const vector & rhs):objects(null)

~vector()

下面是運算子的過載:

const vector & operator = (const vector & rhs)

iterator end()

用到了 開始和結束位置。

下面我們來寫主要的操作函式了:

void reserve(int newcapacity)//重新設定陣列大小,擴大為原來的一倍

vector(const vector & rhs):objects(null)

~vector()

const vector & operator = (const vector & rhs)

thesize=newsize;

} object &operator(int index)

const object &operator(int index) const

void reserve(int newcapacity)

{ if(newcapacity>thecapacity)

{ object *oldarray=objects;

objects=new object[newcapacity];

for(int k=0;k

具體在呼叫函式的時候還要加上某些邏輯來操作,比如判斷是否為空了之後再來刪除等等。

好今天到這就結束了,這是開始。。路很長。。。感謝自己的堅持!

資料結構之向量vector

這裡將借助stl的vector 向量 實現動態陣列,並用它來管理資料。函式功能 複雜度size 返回向量的元素數 o 1 push back x 在向量尾新增元素x o 1 pop back 刪除向量的最後乙個元素 o 1 begin 返回指向向量開頭的迭代器 o 1 end 返回指向向量尾的迭代器...

資料結構 vector

vector是不定長陣列,也就是說它的長度是不固定的,簡單地說就是 按需分配 這聽上去似乎有點麻煩,但在宣告陣列時如果我們並不清楚陣列的長度,並且簡單粗暴地使用 define maxn 1000000會導致記憶體失去了夢想 就算不,仍有大量的記憶體成了鹹魚。這個時候,我們就需要vector陣列。先看...

資料結構之vector

vector是c 中的一種序列式容器,依靠其下標索引來訪問獲取容器內容。vector和array同為序列式容器,其資料格式 操作等方面都十分相似,其最大不同點在於它們對於記憶體空間的使用。array是靜態陣列,使用者必須把握好其資料數量,一次性分配合理的記憶體空間。否則array會在新增新元素而空間...