C++ STL容器介绍:Vector

3 篇文章 0 订阅

vector的内存分配

【理解】
vector,简单地讲就是一个动态数组,里面有一个指针指向一片连续的内存空间,当空间不够装下数据时会自动申请另一片更大的空间,然后把原有数据拷贝过去,接着释放原来的那片空间。

【使用】
实际上vector是一个模板类,放在vector头文件中,使用前包含头文件#include < vector>,使用时声明:vector < classname> var_name; 还有一定要加上using namespace std;

【初始化】
vector< int > v; //仅声明
vector< int > v1(10, 1); //初始化为10个值为1的v1
vector< int > v2(v1); //用v1初始化v2
vector< int > v3(10); //初始化为10个默认值0的v3
vector< int > v4(v1.begin(), v1.end()); //将v1第0个到最后一个作为v4的初始值。
int n[]={1,2,3,4,5};
vector< int> v5(n, n+5); //将数组n的前5个元素作为v5的初始值
vector< int> v6(&n[0], &n[4]); // 同上

【深入】
vector对象存放在内存的栈上面,而对象中的数据,也就是这些连续的空间分配是放在内存的堆上,以连续的空间给出。最开始会以满足元素个数为准(比如存放1个int变量,那么vector的容量最初为1),而如果增加元素数量,vector的容量则会以当前容量的一定倍数增长,如当前容量和元素都是4,当再增加一个元素时容量将会变为4*n,不同的操作系统和编译器 n取值也会不同,但是大概为n=1.5或2,也就是说每当容量满员后会增加一半到一倍的容量。

增长后的区域会重新分配地址,原来的内容复制到当前空间上,原始空间被释放掉。所以vector的一个额外的要求就是存储的元素需要有拷贝构造函数

vector的操作优劣

【和数组相比】
优点:
安全,不会不小心越界
可以利用标准库的很多功能,包括现成的成员函数和一些泛化算法
【和list等stl函数相比】
优点:因为vector的存储是以连续区域形式存储的,所以对随机查找操作速度很快。

缺点:
实现插入与删除操作效率低,
只能在尾部插入与删除,在头部插入与删除消耗时间规模与容器大小成正比。
当动态添加的数据超过默认内存大小时,要进行整体的重新分配,拷贝与释放。

vector的操作函数

1. push_back      在数组的最后添加一个元素
2. pop_back       去掉数组的最后一个元素
3. at             获得某一位置的数组元素
4. begin          得到数组第一个元素的迭代器
5. end            得到数组的最后一个元素之后的迭代器
6. front          得到数组第一个元素的引用
7. back           得到最后一个元素的引用
8. max_size       得到vector
9. capacity       当前vector分配的大小
10. size          当前元素占用的空间大小
11. resize        改变当前元素占用的大小,如果它比当前使用的大,者填充默认值
12. reserve       改变当前vecotr所分配空间的大小
13. erase         删除指针指向的数据项
14. clear         清空当前的vector, 但存储空间不变
15. rbegin        指向反向迭代器的开始,即vector正向迭代器的end
16. rend          指向反向迭代器的末尾,即vector的begin
17. empty         判断vector是否为空
18. swap          与另一个vector交换数据,或用来释放空间
19. insert        在某一位置插入一个或一组元素
20. 下标操作符      同at()一样
21. assign        将n个元素拷贝赋值给当前vector
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值