c++之顺序容器

顺序容器

顺序容器提供快速顺序访问元素的能力。
vector可变数组大小,支持快速访问,在尾部之外的位置插入删除较慢
deque双端队列,支持快速随机访问,头尾插入删除元素很快
list双向链表,只支持双向顺序访问,在list中任何位置插入删除都很快
forward_list单向链表,只支持单向顺序访问,在链表任何位置插入删除都很快
array固定大小数组,支持快速随机访问,不能添加删除元素
string与vector类似,保存字符。
string和vector将元素保存在连续的内存空间中,由于元素连续存储,由元素下标计算地址非常快速。
forward_list和array是新C++标准增加的类型,与内置数组相比,array是一种更安全更容易使用的数组类型。与内置数组类似,array对象的大小固定,不支持添加和删除元素及改变容器大小的操作。
通常,使用vector是最好的选择。

容器库

迭代器

forward_list迭代器不支持递减运算符(–)。
迭代器范围是标准库的基础
begin和end分别指向第一个元素和最后一个元素之后的位置。
元素范围被称为左闭合区间[begin,end)
如果begin与end相等,范围为空,如果不等,则至少包含一个元素
只有顺序容器的构造函数才接受大小参数,关联容器并不支持。
不能对内置数组类型进行拷贝或对象赋值,但array并没有此限制。

顺序容器操作

添加元素

forward_list有专门的insert和emplace,不支持push_back和emplace_back。
vector和string不支持push_front和emplace_front。
向vector,string,deque插入元素会使指向容器的迭代器,引用和指针失效。
顺序容器访问元素的操作
c.back()返回尾元素的引用,c为空的话函数行为未定义
c.front()返回首元素的引用,c为空的话函数行为未定义
c[n]
c.at(n)
访问成员函数返回的是引用。可以用来改变元素的值。

vector对象如何增长

额外的string操作

从const char*创建string时,指针指向的数组必须以空字符结尾,拷贝操作遇到空字符停止。

substr

s.substr(pos,n)返回string,包含s中从pos开始的n个字符的拷贝

容器适配器

stack,queue,priority_queue

定义适配器

每个适配器定义两个构造函数:默认构造函数构建一个空对象,接受一个容器的构造函数拷贝该容器来初始化适配器。
stack和queue是基于deque实现的,priority_queue是在vector上实现的。
queue适配器可以构造于list和deque之上,但不能基于vector构造。

stack

每个容器适配器都基于底层容器类型的操作定义了自己的特殊操作,只能用适配器操作,不能使用底层容器类型操作。stack只能用push,而不能用deque的push_back。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值