c 模板 類(vector容器的粗糙實現)

2021-10-22 09:35:04 字數 1746 閱讀 4033

平時stl用起來十分的方便,但卻一直沒有深入了解過其中的實現原理,所以今天就粗略的用自己有限的知識實現vector容器的部分功能。

首先vector容器的原理並不複雜:動態申請記憶體和釋放記憶體。

之前一直想著動態申請記憶體要使用realloc(),當空間不足就追加適當的空間,但是具體自己做的時候發現,如果追加空間那麼如果後面的空間被佔了怎麼辦呢?畢竟vector空間的位址是乙個連續的線性空間,如果直接追加會造成意想不到的情況。所以應該另外開闢新的空間將之前的元素存放進去。

不廢話了~~~

#pragma once

//保證標頭檔案不會被include多次

template

<

class

t>

class

myvector

delete

element;

element = newdata;

capacity = newsize;

}public

:myvector()

~myvector()

myvector

(int newsize)

void

push_back

(t e)

element[cursize]

= e;

cursize++;}

void

pop_back()

t temp = element[cursize -1]

; cursize--;if

(cursize <= capacity /4)

} t back()

return element[cursize -1]

;}bool

empty()

intsize()

t &operator

(int i)

};

測試**:

#include

#include

#include

"myvector.h"

using

namespace std;

myvector arr;

//myvectorarr(10);

intmain()

cout <<

"當前arr.size() = "

<< arr.

size()

<< endl;

cout <<

"末尾元素 = "

<< arr.

back()

<< endl;

arr.

pop_back()

; cout <<

"末尾元素退出後arr.size() = "

<< arr.

size()

<< endl;

if(arr.

empty()

)else cout <<

"容器不為空!\n"

;return0;

}

關於每次擴容為什麼要以2倍增加:

網上大佬們總是用const、&之類的東東,我暫時還不會用,應該是為了更加安全吧不是很懂~

有大佬懂的話希望能給我指個路,好讓我去學習學習。

C 中 vector容器 模板類陣列

對vector容器的一點理解,相對於陣列,vector容器可以不固定大小,但是需要而外的記憶體 空間,這是用空間來換取陣列動態大小的一種方式 1.定義 vector a 定義了乙個空的int型陣列 vectorb n 定義了乙個長度為n的double型陣列 vectorb c 定義乙個c的副本 ve...

C 簡單Vector模板類

用template 來實現n維向量的相關性質。寫的時候其中有幾個關鍵的地方 1.模板類的函式定義必須和標頭檔案放在乙個cpp檔案裡,系統不支援模板類的單獨編譯。2.定義模板類的成員 友元 函式時,都要加 template or template 3.對於模板類的友元函式,都宣告成了非約束 unbou...

C 容器vector類的相關操作

一 capacity容量 vector的容量永遠大於或等於其大小,一旦容量等於大小,便是滿載,下次再有新增元素,整個vector容器就得另尋居所。1 c.capacity 不重新分配記憶體空間的話,c可以儲存多少元素 2 c.reserve 分配至少能容納n個元素的記憶體空間 vector v fo...