vector表示的是可變大小的數組,可是其類型不肯定,由於是模板類。因此其尾部沒有\0,也就是不須要空一個位置存儲\0。數組
其主要由3個指針控制其數組:ide
_start:指向其數組的首元素。函數
_finish:指向其數組有效元素的後一位,也就是size=_finish-_start.也至關於指向的是size位置。spa
_endofstorage:指向的是數組能夠存儲有效元素的後一位,也就是capacity=_endofstorage-_start;指針
也就是至關於指向的是capacity。內存
其主要操做是經過迭代器來實現的。ci
insert:再pos位置前面插入一個數據it
erase:刪除pos位置的數據,並返回刪除元素的下一個元素位置。模板
vector裏面沒有find函數,若是想要使用find,得在algorithm庫裏面,find(v.begin(),v.end(),x);class
若是找到返回位置,不然返回end();
迭代器失效問題:
主要由2個方面:
一、擴容:當迭代器指向了某個空間位置時,忽然使用push_back 或insert等,使原來空間發生變化時,這時迭代器會失效。(也就是it是指向的舊內存空間被delete,而it還指向其舊空間)
2、erase:當刪除迭代器所指元素時,此時的it會失效。須要從新賦值。
解決迭代器失效的辦法就是將其從新賦值。
memcpy是淺拷貝,當拷貝自定義類型時,沒有錯,可是拷貝自定義類型時,就會出錯。