1.基本概念
vector数据结构和数组非常相似,也称为单端数,不同之处在于数组是静态空间,而vector可以动态扩展
动态扩展: 并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间
2.构造函数
vector<T> v; //采用模板实现类实现,默认构造函数
vector < int > v1 ;
vector(v.begin(), v.end())
; //将
v[begin(), end())
区间中的元素拷贝给本身。
vector < int > v2 ( v1 . begin (), v1 . end ());
vector(n, elem)
; //构造函数将
n
个
elem
拷贝给本身。
vector < int > v3 ( 10 , 100 );
vector(const vector &vec)
; //拷贝构造函数。
vector < int > v4 ( v3 );
3.赋值操作
vector& operator=(const vector &vec); //重载等号操作符
vector<int> v1;
vector < int > v2 ;v2 = v1 ;
assign(beg, end); //将[beg, end)区间中的数据拷贝赋值给本身。
vector < int > v3 ;v3 . assign ( v1 . begin (), v1 . end ());
assign(n, elem)
;
//
将
n
个
elem
拷贝赋值给本身。
vector < int > v4 ;v4 . assign ( 10 , 100 );
4.容量和大小
empty(); //
判断容器是否为空
int a= v1 . empty (); //1为空,0为非空
capacity(); //
容器的容量
int b= v1 . capacity ();
size(); //
返回容器中元素的个数
int c= v1 . size ();
resize(int num); //
重新指定容器的长度为
num
,若容器变长,则以默认值填充新位置。
如果容器变短,则末尾超出容器长度的元素被删除。
//resize 重新指定大小 ,若指定的更大,默认用 0 填充新位置,可以利用重载版本替换默认填充v1 . resize ( 15 , 10 );
resize(int num, elem); //
重新指定容器的长度为
num
,若容器变长,则以
elem
值填充新位置。
如果容器变短,则末尾超出容器长度的元素被删除
v1 . resize ( 5 ); //resize 重新指定大小 ,若指定的更小,超出部分元素被删除
5.插入和删除
push_back(ele)
; //
尾部
插入元素
ele
v1 . push_back ( 10 );
pop_back()
; //删除最后一个元素
v1 . pop_back ();
insert(const_iterator pos, ele)
; //迭代器指向位置
pos
插入元素
ele
v1 . insert ( v1 . begin (), 100 );
insert(const_iterator pos, int count,ele); //
迭代器指向位置
pos
插入
count
个元素
ele
v1 . insert ( v1 . begin (), 2 , 1000 ); //在第0个位置插入两个1000
erase(const_iterator pos); //
删除迭代器指向的元素
v1 . erase ( v1 . begin ());
erase(const_iterator start, const_iterator end); //
删除迭代器从
start
到
end
之间的元素
v1 . erase ( v1 . begin (), v1 . end ());
clear()
;
//
删除容器中所有元素
v1 . clear ();
6.数据存取
at(int idx)
; //返回索引
idx
所指的数据
vector < int > v1 ;int a=v1 . at ( i );
operator[]
; //返回索引
idx
所指的数据
int b=v1 [ i ]
front()
; //返回容器中第一个数据元素
int c=v1 .front () ;
back()
; //返回容器中最后一个数据元素
int d= v1 . back ();
7.互换容器
swap(vec); // 将vec与本身的元素互换
v1.swap(v2);
可用
vector<int>(v).swap(v);
收缩内存
本质上是创建了一个匿名对象x,编译器会用容器v的元素个数初始化x的大小,用swap()交换时交换了内存,最后编译器自动回收x的内存
8.预留空间
reserve(int len); //容器预留len个元素长度,预留位置不初始化,元素不可访问。
v.reserve(100000);
总结:如果数据量较大,可以一开始利用reserve预留空间