容器

1、顺序容器:将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,包括vector、list和deque(双端队列”double-ended queue)。
        容器适配器:根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型,包括stack、queue和priority_queue类型。

2、顺序容器类型
顺序容器
vector                                                   支持快速随机访问
list                                                          支持快速插入/删除
deque                                                 双端队列
顺序容器适配器
stack                                                    后进先出(LIFO)栈
queue                                                 先进先出(FIFO)队列
priority_queue                              有优先级管理的队列

3、使用顺序容器类型,必须先包含相关的头文件。

4、容器元素的初始化
C<T> c; 创建一个名为c的空容器。C是容器类型名 ,如vector,T是元素类型,如int或string。适用于所有容器
C c(c2);    创建容器c2的副本c;c和c2必须具有相同的容器类型,并存放相同类型的元素。适用于所有容器
C c(b,e);   创建c,其元素是迭代器b和e标示的范围内元素的副本。适用于所有容器
C c(n,t);    用n个值为t的元素创建容器c,其中t必须是容器类型C的元素类型的值,或者是可转换为该类型的值,只适用于顺序容器
C c(n);    创建有n个值初始化元素的容器c,只适用于顺序容器

5、容器内元素的类型约束
1)元素类型必须支持赋值运算
2)元素类型的对象必须可以赋值
假设类Foo没有默认构造函数,但提供了需要一个int型形参的构造函数:
vector<Foo> empty;    //ok:no need for element default constructor
vector<Foo> bad(10) ;    //error:no default constructor for Foo
vector<Foo> ok(10 , 1);    //ok:each element initialized to 1

6、在指定容器元素为容器类型是,必须用空格隔开两个相邻的>符号,以示这是两个分开的符号。
如:vector< vector<string> > lines;//ok:space required between close>

7、常用迭代器运算(item,iter1和iter2为容器的迭代器):
*item
item->mem
++item
item++
--item
item--
iter1 ==iter2
iter1 != iter2

8、vector和deque容器的迭代器提供的额外运算:
iter + n
iter - n
iter1 += iter2
iter1 -= iter2
iter1 - iter2
>, >= , < , <=

8、迭代器范围:C++使用一对迭代器标记迭代器范围,这两个迭代器分别指向同一个容器中的两个元素或超出末端的下一个位置,命名为first和last或beg和end。此类元素范围称为左闭合区间,形式为:
[first , last)

9、顺序容器的操作:
1)在容器中添加元素
2)在容器中删除元素
3)设置容器大小
4)获取容器内的第一个和最后一个元素

10、begin和end操作产生指向容器内第一个元素和最后一个元素的下一位置的迭代器。
c.begin();
c.end();
c.rbegin();      返回一个逆序迭代器,它指向容器c的最后一个元素
c.rend();          返回一个逆序迭代器,它指向容器c的第一个元素前面的位置

11、所有顺序容器都支持push_back操作,提供在容器尾部插入一个元素的功能。
在顺序容器中添加元素的操作
c.push_back(t)
c.push_front(t)   只适用于list和deque容器类型
c.insert(p,t) 在迭代器p所指向的元素前面插入值为t的新元素。返回指向新添加元素的迭代器
c.insert(p,n,t) 在迭代器p所指向的元素前面插入n个值为t的新元素。返回void类型
c.insert(p,b,e) 在迭代器p所指向的元素前面插入由迭代器b和e标记的范围内的元素。返回void类型

12、任何insert或push操作都可能导致迭代器失效,当编写循环将元素插入到vector或deque容器中时,程序必须确保迭代器在每次循环后都得到更新。

13、顺序容器的大小操作:
c.size()
c.max_size()   返回容器c可容纳的最多元素个数
c.empty()
c.resize() 调整容器c的长度大小,使其能容纳n个元素
c.resize(n,t) 调整容器c的大小,使其能容纳n个元素,所有新添加的元素值都为t

14、访问顺序容器内元素的操作:
c.back()   返回容器c的最后一个元素的引用。如果c为空,则该操作未定义
c.front() 返回容器c的第一个元素的引用。如果c为空,则该操作未定义
c[n]    返回下标为n的元素的引用,只适用于vector和deque容器
c.at(n) 返回下标为n的元素的引用。只适用于vector和deque容器

15、删除顺序容器内元素的操作:
c.erease(p) 删除迭代器p所指向的元素,返回一个指向被删除元素后面的元素的迭代器
c.erease(b,e) 删除迭代器b和e所标记的范围内所有的元素,返回一个指向被删除元素后面的元素的迭代器
c.clear() 删除容器c内的所有元素,返回void
c.pop_back()
c.pop_front() 只适用于list或deque容器

16、顺序容器的赋值操作:
c1 = c2
c1.swap(c2) 交换内容:调用完该函数后,c1中存放的是c2原来的元素,c2中存放c1原来的元素,c1和c2的类型必须相同
c.assign(b,e) 重新设置c的元素,将迭代器b和e标记的范围内所有的元素复制到c中
c.assign(n,t) 将容器c重新设置为存储n个值为t的元素
如果在不同(或相同)类型的容器内,元素类型不相同但相互兼容,则其赋值运算必须使用assign函数。
使用swap操作不会删除或插入任何元素。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值