c++ vector 先进先出_C++ STL Vector(容器)学习

本文详细介绍了C++ STL中的Vector容器,包括其动态空间扩展机制、迭代器类型、数据结构和常用操作,如push_back、pop_back、resize等。Vector作为动态数组,提供高效随机访问但插入和删除操作可能涉及元素移动,而list虽然插入删除高效,但随机访问性能较差。此外,还提及了其他序列式容器如deque、stack、queue和priority_queue的特点和底层实现。
摘要由CSDN通过智能技术生成

本文参考博客链接及书籍:

侯捷老师的《STL 源码剖析》

在C++标准库中,STL容器是一些常用数据结构的实现,比如数组、链表、树、栈、队列、散列表、集合、映射表等,可以分为序列式(sequence) 和关联式(associative)两种。侯捷老师的STL源码解析一书中的图表示的很明确。

一、序列式容器(sequence)

序列式容器中的元素都可以排序,但是并非有序,array是C++语言本身提供的序列式容器,而STL另外提供了cector,list,deque,stack,queue,priority-queue等序列式容器。

1、  Vector

主要特点:动态空间,随着元素的加入自动扩充空间容纳新元素;必须注意的是,所谓动态增加大小并不是在原空间之后连续新空间,因为新空间可能已经用完了,或是不足以分配足够的空间,而是以原始数据大小的两倍另外配置一块较大的空间,并将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原始空间。即容量的扩张必须经历“重新配置,元素移动,释放原空间”等操作。在对vector的操作中,如果出现空间重新配置,指向原vector的所有的迭代器均会失效。

(1)、vector的迭代器

Vector维护的是连续线性空间,普通指针可以作为其迭代器进行随机存取,因此vector提供的是Random Access Iterators。

(2)、vector的数据结构

连续线性空间,用两个迭代器start和finish分别配置得来的连续空间中目前已经被使用的范围,并用迭代器end_of_storage指向整块连续空间的尾端(包含备用空间).

(3)、相关方法

push_back(i) 在数组的最后添加一个数据i(空间的动态增长,2倍扩充)

pop_back ()去掉数组的最后一个数据,函数是void类型,无返回值

at(i)得到编号位置i的数据

begin()返回指向容器第一个元素的迭代器

end()返回指向容器最后一个元素的迭代器

front()返回向量中第一个元素

back()返回向量中最后一个元素

max_size()返回vector最大可以是多大

capacity()当前vector分配的大小(不要和size() 混淆,前者是实际分配给vector对象的空间大小,后者是指该对象中目前的元素个数是多少)

size()当前向量中元

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值