顺序容器操作

容器大小操作

  • empty()
    返回bool值,容器为空时true,非空时false
  • max_size()
    返回一个大于或等于该类型容器所能容纳的最大元素个数(即size()一定不超过max_size())。
  • size()
    返回容器中元素的个数,但forward_list不支持size()
    原因如下:
    forward_list的设计目标是达到与最好的手写单向链表的数据结构性能相当,而实现size()需要计算或者保存,为了避免这个额外开销,forward_list没有实现size().

    我们可以用distance(flist.begin(),flist.end())来获取单链表中元素的个数


向顺序容器删添元素


  • push_back(t)
  • emplace_back(args)
    向尾端加入一个元素,t为元素的值,args为元素的构造参数
    emplace构造一个元素而不是拷贝
struct St
{
    int x, y;
    St(int _x,int _y):x(_x),y(_y){}
};
vector<St> vi;

vi.emplace_back(1,2);       //调用构造函数生成St对象然后插入容器尾

St st1(2,3);
vi.push_back(st1);          //只接受容器值类型

  • push_front(t)
  • emplace_front(args)
    在容器头部插入元素,其余同上

  • insert(p,t)
  • emplace(p,args)
    在迭代器p 之前的位置插入一个元素t或者由args创建
    返回新插入元素的第一个元素的迭代

  • erase(p)
  • erase(b,e)
    删除迭代器p所指的位置的元素,返回最后一个被删除元素 之后元素 的迭代器

    IMPORTANT : 对于erase(b,e)返回的并不是e,因为执行删除操作之后,e迭代器已经失效了


b,e与删除的元素
  • insert(p,n,t)
  • insert(p,b,e)
  • insert(p,il)
    在迭代器p 之前的位置插入n个元素t,或迭代器b,e之间的元素,或一个初始化列表
    返回新插入元素的第一个元素的迭代器

forward_list的特殊操作

forward_list 不支持 push_back 和 emplace_back
对于insert和emplace也有自己的特殊版本

在顺序容器中某个位置删除或添加一个元素时,需要获取该位置前驱的迭代器,因为forward_list是单向链表,不能直接获取前驱,所以标准库中定义的是 insert_afteremplace_aftererase_after,对指定位置后面一个位置进行操作

insert_after 及 emplace_after与上面的相似
特别的,erase_after(p)删除p之后的元素,erase_after(b,e)删除的元素范围如下(b,e之间不包括b)
erase_after(b,e)删除的元素范围


访问元素

对于连续存储容器(vector \ string \ deque \ array)可用下标访问

c[i]

所有容器都可以通过迭代器访问元素

*_iterator

还可以方便的访问容器的首尾元素

c.front()
c.back()

同样地,forward_list没有定义back()

以上的所有访问返回的都是引用,可以修改元素的值。


改变容器的大小

  • resize(n,t)
  • resize(n)

如果 n < c.size(),则大于n的部分会被丢弃
如果 n > c.size(),则会创建不足的元素
对于指定了t的,创建值为t的元素
对于未指定的,如果元素是内置类型则执行值初始化
如果元素是类类型,且该类没有默认构造函数,则必须为其指定一个t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值