平時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...