vector的內部實現

2021-06-17 22:11:11 字數 2425 閱讀 6519

假定你現在已經能熟練使用vector,如果你很好奇vector背後是怎麼實現的,那麼本文或許對你能有所幫助。

vector代表了c++的動態陣列,大小是動態可增長的。你不必考慮自己手動分配或釋放記憶體,也不必擔心記憶體洩漏,vector幫你做了這一切。vector的使用很簡單,但是要做到有效率,沒那麼容易,了解他背後的實現原理能幫助達到這一目的。

讓我們先看看類的宣告和資料成員:

#include //記憶體分配器標頭檔案,非標準

#include //迭代器標頭檔案,非標準

template //模板類宣告,提供泛型功能。

class vector //返回vetor的首

const_iterator begin() const //唯讀訪問

iterator end() //返回vector的末尾

const_iterator end() const //唯讀訪問

reverse_iterator rbegin() //反向迭代器

const_reverse_iterator rbegin() const //唯讀訪問

reverse_iterator rend() //反向迭代器

const_reverse_iterator rend() const

size_type size() const //size,vector的長度

size_type max_size() const   //vector支援的最大長度,4294967295

size_type capacity() const //vector的當前   容量.表示當前的vector有多大的容量。

bool empty() const //判斷vetor是否為空,實現保證這個函式永遠是常量時間複雜度。判斷vector為空間已用empty,不要用size()==0,因為 size()有可能是線性時間複雜度。

reference operator(size_type n) //  操作符

const_reference operator(size_type n) const //唯讀

vector() : start(0), finish(0), end_of_storage(0) {} //預設建構函式

vector(size_type n, const t& value)

finish = start + n;

end_of_storage = finish;

}vector(size_type n)

vector(const vector& x)

end_of_storage = finish;

}vector(const_iterator first, const_iterator last)

end_of_storage = finish;

}~vector()

vector& operator=(const vector& x);

void reserve(size_type n)

}reference front() //返回vector的第乙個元素

const_reference front() const //

reference back() //返回vector的最後乙個元素

const_reference back() const

void push_back(const t& x) else

insert_aux(end(), x); //如果vector容量已滿,進行插入。

}void swap(vector& x)

iterator insert(iterator position, const t& x) else

insert_aux(position, x); //vector的插入需要拷貝調整元素的位置,因而需要拷貝,效率低

return begin() + n;

}iterator insert(iterator position)

void insert (iterator position, const_iterator first,

const_iterator last);

void insert (iterator position, size_type n, const t& x);

void pop_back()

void erase(iterator position)

void erase(iterator first, iterator last)

void resize(size_type new_size, const t& x)

void resize(size_type new_size)

void clear() //清除vector的所有元素,實現保證這個是線性時間的,o(n).

vector的常用介面就說到這裡了,大家可以仔細體會。

vector內部的實現1

寫vector的內部方法 1 include2 using std vector 3 寫乙個動態記憶體45 classca9 ca 10 11 template 12class cstack13 22 template 23void cstack pop 2427 28 template 29 cs...

vector的clear操作的內部過程

最近在論壇看到乙個提問帖子,問題是vector中儲存了物件的指標,呼叫clear後這些指標如何刪除?class test test int main 同時最近又看到一道面試題 對於stl中的vector呼叫clear時,內部是如何操作的?若想將其記憶體釋放,該如何操作?針對以上兩個問題,我們追蹤一下...

vector的clear操作的內部過程

在使用clear時遇到了一些問題,看到網上的資料,寫的很不錯 我也學習到很多。要注意vector儲存指標的問題。最終還是要使用delete依次釋放才行。最近在論壇看到乙個提問帖子,問題是vector中儲存了物件的指標,呼叫clear後這些指標如何刪除?cpp view plain copy clas...