面試高頻考點之vector容器篇

2021-10-07 13:14:03 字數 2388 閱讀 2075

vector是c++中stl(standard template libaray-標準模板庫)的乙個容器元件, vector是表示可變大小陣列的序列容器,就像陣列一樣,vector也採用的連續儲存空間來儲存元素。也就是意味著可以採用下標對vector的元素進行訪問,和陣列一樣高效。但是又不像陣列,它的大小是可以動態改變的,而且它的大小會被容器自動處理。vector官方文件

標題中已經明確指出,vector容器是面試時的高頻考點,如果不需要找工作,請忽略此篇文章.

業界流傳著一句話,「不懂stl,不要說你會c++」,然而vector容器又是stl非常重要的一部分,所以想學好c++,必須知道vector.

vector是表示可變大小陣列的序列容器,在日常程式設計中,如果能熟練使用vector容器,會給自己帶來很大便利.

vector內部開闢了乙個陣列,但並非vector的成員變數,vector的主要成員變數為3個指標.

三個指標分別指向這個陣列的第乙個元素位置,最後乙個有效元素的下乙個位置,陣列最後乙個空間的下乙個位置.

這個陣列並不在容器的成員變數中,訪問元素時,通過容器內的3個指標和元素的偏移量訪問陣列中的元素.如上圖所示,此容器的有效元素個數通過finish和start相減得到.容量為end和start指標相減得到.刪除末尾元素時,需要finish向前移動,插入元素時,需要finish向後移動,當finish與end重合時,此容器存滿.

擴容時,申請乙個更大的陣列,將此陣列中的元素拷貝到申請的陣列中,然後將3個指標指向新開的陣列,最後釋放原來的陣列即可.

template

<

class

t>

class

vector

//獲取有效元素個數

size_t size()

const

//獲取當前容量

size_t capacity()

const

//尾插元素val

void

pushback

(const t& val)

*_finish = val;

_finish++;}

//將容器容量擴大為n

void

reserve

(size_t n)

_finish = tmp +

size()

;delete

_start;

_start = tmp;

_eos = tmp + n;}}

//運算子過載,外部可直接由訪問陣列

t&operator

(size_t n)

const t&

operator

(size_t n)

const

//返回開始位置迭代器

iterator begin()

//返回末尾位置迭代器

iterator end()

const_iterator begin()

const

const_iterator end()

const

//修改有效元素個數為n,n > size時用val填充剩餘元素,n < size時,直接刪除末尾元素

void

resize

(size_t n,

const t& val =t(

))} _finish = _start + n;

}//在pos迭代器位置之前插入val元素

void

insert

(iterator pos,

const t& val)

iterator it = _finish;

while

(pos < it)

*pos = val;

_finish++;}

}//刪除pos處迭代器元素

iterator erase

(iterator pos)

_finish--;}

return pos;

}//拷貝建構函式

vector

(const vector& v)

_finish = _start + v.

size()

; _eos = _start + v.

capacity()

;}//析構函式

~vector()

}//=運算子過載,可實現vector之間用 = 直接賦值

vector

&operator

=(vector v)

void

swap

(vector

& v)

};

C STL 考點 容器(vector)

default 1 explicit vector const allocator type alloc allocator type fill 2 explicit vector size type n vector size type n,const value type val,const a...

前端面試筆試高頻考點

let,const,var的區別。const定義的物件是否可以修改 var 宣告變數 可以進行變數提公升 let 宣告變數 不能進行變數提公升 作用域比var更小 形成塊級作用域 const 宣告變數 宣告常量 定義的變數不能修改,但物件可以修改 js的基本資料型別 五中可包含值的型別 字串 str...

高頻面試考點 反序排列單鏈表

12.8 4 編寫乙個函式,反序排列乙個單鏈表中所有的節點。函式應該具有下面的原型 struct node sll reverse struct node first 在標頭檔案singly linked list node.h中宣告節點資料結構。函式的引數指向鍊錶的第乙個節點。當鍊表被重排之後,函...