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中宣告節點資料結構。函式的引數指向鍊錶的第乙個節點。當鍊表被重排之後,函...