向量(vector)是定义于名称空间std内的模板。是一种序列式容器
头文件:#include<vector>
template <class T, class Allocator=allocator<T>> class vector;
底层实现:数组。连续存储的容器,动态数组,在堆上分配内存空间。
内存增长为两倍容量增长:当插入新元素时,如果还有剩余空间,那么直接添加到最后(或者插入到指定位置),然后调整迭代器;如果没有剩余空间了,就分配原来空间的两倍,然后将原空间的数据复制到新空间,再向新空间添加元素,最后析构释放原有空间,之前的迭代器将失效。
性能:尾部插入或删除速度较快,时间复杂度O(1);而对于其他部位,则花费的时间比较长一些,主要是移动元素耗费时间,时间复杂度O(n)。
vector在中间结点插入和删除会导致内存拷贝;
vector随机访问性能极好,插入删除性能较差;
适用场景:经常随机访问,且不经常对非尾结点进行插入或删除
以下贴出一些vector成员函数,主要看返回类型,参数,基本上会用就行
(1)push_back(); 作用:插入一个元素到容器尾部
void push_back(const _Ty& _Val) { //插入元素在末端, provide strong guarantee emplace_back(_Val);
}
void push_back(_Ty&& _Val) { //通过移动到元素末尾插入, provide strong guarantee emplace_back(_STD move(_Val));
}
(2)pop_back(); 作用:弹出最后一个元素
void pop_back() noexcept /* strengthened */ {
auto& _My_data = _Mypair._Myval2;
pointer& _Mylast = _My_data._Mylast;
#if _ITERATOR_DEBUG_LEVEL == 2
_STL_VERIFY(_My_data._Myfirst != _Mylast, "vector empty before pop");
_Orphan_range(_Mylast - 1, _Mylast);
#endif // _ITERATOR_DEBUG_LEVEL == 2
_Alty_traits::destroy(_Getal(), _Unfancy(_Mylast - 1));
--_Mylast;
}
(3)capacity(); 作用:返回容器实际能容纳的元素容量
(4)assign(); 作用:更新容器内容操作
at(); 作用:像数组那样访问元素。如v1.at(1);
front(); 作用:返回第一个元素
back(); 作用:返回最后一个元素
begin(); 作用:迭代器相关函数,指向第一个元素
end(); 作用:迭代器相关函数,指向最后一个元素的下一个元素
cbegin() 作用:返回值类型为const_iterator,功能同begin
cend(); 作用:返回值类型为const_iterator,功能同end
rbegin(); 作用:迭代器相关函数,指向逆向迭代的第一个元素,
rend(); 作用:迭代器相关函数,指向逆向迭代的最后一个元素的下一个元素
clear(); 作用: 清空容器中所有元素
reserve();
resize();
size(); 作用:返回容器中现有数量
swap();
crbegin(); 返回值类型为const_reverse_iterator,功能同crbegin
crend(); 返回值类型为const_reverse_iterator,功能同crend
data();
emplace();
emplace_back(); 作用:是减少对象拷贝和构造次数 C++11 主要适用于对临时对象的赋值。
empty(); 作用:判断容器是否为空,为空,则函数返回真。
erase(); 作用:删除指定元素
get_allocator(); 作用:给容器分配空间
insert(); 作用:插入元素到指定位置
max_size(); 作用:返回最大容量
operator= 作用:可以将一个vector通过=符号赋给另一个vector
operator[] 作用:使vector可以像数组那样通过下标,实现随机访问
_Emplace_reallocate();
_Unchecked_begin();
~vector();
==============================================================================================
写不动了,明天再写