C vector详解
【導讀】:vector是一個封裝了動態大小數組的順序容器(Sequence Container)。跟任意其它類型容器一樣,它能夠存放各種類型的對象。可以簡單的認為,vector是一個能夠存放任意類型的動態數組。接下來,請跟隨小編一起來復習一下吧。
以下是正文
前言
本文mark了vector的一些接口,介紹了vector中的對內存和對象的管理詳解請見cppreference-vector。
1. vector內部管理著一塊內存,壓入對象的時候,會使用這塊內部的內存使用placement new去進行對象的生成,而釋放對象的時候,顯式的去調用析構函數去釋放對象。
2. size代表vector中的實際含有元素數量,而capacity表示容量。
3. resize()調整size的時候會生成或釋放元素,釋放的本質只是調用了析構,但是那塊內存塊還在vector中。
4. reserve()調整capacity的時候只會增大但是不會減小。
5. push_back()同時支持copy構造&和移動語義構造&&,配合std::move或者std::forward效果更佳。
6. earse()用來刪除元素,參數是迭代器, 范圍刪除的時候是前閉后開【 )。
7. emplace()相當于insert(),但是其通過參數包和模板偏特化減少了一次拷貝構造的過程。
正文
?
2.1 vector基本布局
一個簡單的vector,我們可以理解成如下形式,主要是舉了reserve()和resize()這兩個例子,來舉例vector是如何分配內存,創建初始化對象的,以及析構對象的;
vector內部管理著一塊內存,當需要push_back對象的時候,會使用這塊內部的內存使用placement new去進行對象的生成,而釋放對象的時候,顯示的去調用析構函數去釋放對象(這只是一種理解,實際實現不一定如此,但是原理上大同小異)
2.2 constructor
基本構造函數
有四種如下的方式,其中特別注意使用iterator的方式進行copy construct的時候,也可以直接傳遞數組地址過去,會自動轉換
列表初始化
可以使用c 11的列表初始化進行快速初始化
vector?a{{1},?{2},?{3}};????//加不加括號都一樣vector?a={{1},?{2},?{3}};2.3 size()和capacity()
size是指當前vector中含有的元素數量,capacity是指vector中擁有的空間
void?resize?(size_type?n);調整vector的size, 如果size比當前擁有的大,會創建默認對象進行push_back,如果size比當前的小,會縮小size,但是不縮小capacity,創建和釋放會調用構造函數與析構函數
vector?v;v.resize(5);????//調整元素個數void?reserve?(size_type?n);調整vector的capacity,如果capacity比當前的小,不縮小,反之,則增加capacity
vector?v;v.reserve(5);????//調整容量大下value_type*?data()?noexcept;返回內存塊的指針首地址
2.4 element access
reference?at?(size_type?n);返回對應的位置元素的引用,和[]作用相同,但是會做檢查
總結
以上是生活随笔為你收集整理的C vector详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大众什么车带电脑系统(大众专用电脑怎么用
- 下一篇: C 之父:C 的成功属于意料之外,C