底層數據結構:動態開闢的數組,每次以原始空間2倍擴容 vector vec; 增加 vec.push_back(100);容器末尾加元素 時間負責度O(1) 可能導致容器擴容 容器中的,對象的構造析構,記憶體的開闢釋放,通過什麼來實現? 容器的空間配置器allocator allocate deall ...
底層數據結構:動態開闢的數組,每次以原始空間2倍擴容
vector
增加
vec.push_back(100);容器末尾加元素 時間負責度O(1) 可能導致容器擴容
容器中的,對象的構造析構,記憶體的開闢釋放,通過什麼來實現?
容器的空間配置器allocator
allocate
deallocate
construct
destory
vec.insert(iterator,20);在迭代器指定位置插入元素,花費的時間和需要移動的元素個數有關O(N),可能導致容器擴容
刪除
vec.pop_back();末尾刪除元素 O(1)
vec.erase(iterator);刪除迭代器指定的位置的元素, 花費的時間和需要移動的元素個數有關O(N)
查詢
operator[] 可以通過數組下標實現隨機訪問 vec[5] 時間發給O(1);
iterator迭代器進行遍歷
find , for_each , foreach=>iterator
註意:對容器進行連續的插入或刪除操作,insert/erase,一定要更新迭代器,否則第一次
insert或erase完後,迭代器就失效了.
常用方法介紹
size();返回有效元素個數
empty();是否為空
reserve(20) 給verctor預留空間,只給容器底層開闢指定大小的記憶體空間,並不會添加新的元素.
resize(20):容器擴容用的,不僅給容器底層開闢指定大小的記憶體空間,還會添加元素
swap: 兩個容器進行元素交換
vector
vec.reserve(20) ;//預留記憶體空間,沒有添加元素
當我們預先知道元素個數時,可以避免擴容帶來效率上的降低