[小丁笔记] vector
vector 那些一直没记住的函数详解
构造函数
-
vector( int size, T init )
第一个参数设置容量
第二个参数设置统一的初始值 -
vector( vec )
拷贝一个vector
用vector( std::move(vec) )则是不拷贝的移动,原因在于std::move() -
vector( &a[l], &a[r]+1 )
从数组a中拷贝[l,r]区间的数据并构造vector -
vector( vec.begin()+l, vec.begin()+r+1 )
从vec中拷贝[l,r]区间的数据并构造vector
.resize(int n)
重新设置vector实例的大小。
变大时会将新数字赋值为0。 如果vector的内容是结构体,则会调用构造函数。
变小时会丢弃末尾,这个丢弃过程是不可找回的。
.reserve(int n)
预留空间到n,
如果当前capacity大等n则无事发生
.shrink_to_fit()
将capacity缩小至和size相同
.at(int pos)
同vec[pos],但会有越界检查和抛出错误
swap(vec1, vec2)
是O(1)的
卡常小知识
-
vector的动态空间总用时是O(log size)的,由于小于线性所以不明显
但单次reserve是O(1)的 -
insert() 和 erase() 都是线性的,除非是为了节省码量否则不建议使用