實現vector容器

2021-07-14 22:31:24 字數 1609 閱讀 3515

在c++ stl中 每一種容器都有其自己對應的迭代器實現。迭代器也成為了演算法和容器之間的橋梁。今天先模擬一下vector 容器,以及對應的迭代器。

一、vector實質是可變長的陣列(空間連續),所謂的可變長其實是偽可變長。為了實現可變長,vector的工作實質:

1、初始分配空間大小時,分配按實際需求分配。

2、加入分配空間已經使用滿了,再執行一次push_back會發生什麼情況?其實是重新申請乙個更大的空間(大約原有空間的1.5倍---vs2013),將原來空間的內容拷貝到現有的空間,然後再把需要壓入的數追加到後面,最後,釋放掉原有的空間。

根據第二條,我們就會發現,其實vector的可變長不是在原來空間上增加空間,而是尋求了更大的一塊空間。所以叫偽可變長。

二、vector 的迭代器實質其實是指標,通過觀察vector的迭代器實現的功能。operator++,operator==,operator!=,

operator *等,就會發現,其實,普通指標就天生具備,vector支援隨機訪問,普通指標也有這功能,所以,vector提供的就是random access iterators。

#includeusing namespace std;

templateclass myvec;

myvec(iterator p,int n);

myvec(int num,int value);

~myvec(){};

/* 成員函式 */

public:

iterator begin()

iterator end()

size_type size() const

size_type capacity() const

bool empty()

t& operator(int n)

void push_back(const t&x);

void clear();

iterator erase(iterator ite)

private:

iterator start; //使用空間頭

iterator finish;//使用空間尾

iterator end_of_storage;//可用空間尾

};templatemyvec::myvec(iterator p,int n)

templatevoid myvec:: push_back(const t&x)

else }

templatevoid myvec:: clear() //clear 以後可用容量 不會發生變化,但是使用容量變為 0 暫且不改變值 只是將start 指向的值改為0

int main()

; myvecvec; //驗證預設的建構函式

myvecvec1(20,8); //驗證初始化一樣值的建構函式

myvecvec2(data,10);// 驗證用陣列初始化的建構函式

cout<<"vec.capacity= "<::iterator it=vec1.begin();

for(;it!=vec1.end();it++)

cout<<*it<<" ";

cout<

vector容器的實現 stack容器介面卡的實現

功能 像容器一樣存放各種型別的物件,是乙個存放任意型別的動態陣列,能夠增加和壓縮資料 vector是乙個類模板而不是一種資料型別,故對它的定義,需要指定型別 優點 當程式設計師無法知道自己需要的陣列的規模多大時,用其來解決問題可以達到最大節約空間的目的。實現 vector容器實現 不定長順序表 te...

實現序列式容器 vector

概述 在stl諸多容器中vector一定是使用率最高的了,它使用和資料結果上與array相類似,兩者唯一差別在於 array是靜態空間,而vector是可變空間。因此通常將vector看作可變陣列。由於vector方法較多,在主要此討論實現vector中要注意的幾個點 對於vector而言維護的是一...

容器vector部分功能的實現

這是c primer書中的例題。實現了vector容器的部分功能。具體內容在第四版的18.1節。要考慮到vector的記憶體分配策略。下面分別是用allocator 注釋的部分 和new,delete實現的。1.allocator allocate size t t 分配原始的未構造記憶體以儲存t個...