下载此文档

C++容器-顺序容器,关联容器.pdf


文档分类:法律/法学 | 页数:约5页 举报非法文档有奖
1/5
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/5 下载此文档
文档列表 文档介绍
该【C++容器-顺序容器,关联容器 】是由【小小布】上传分享,文档一共【5】页,该文档可以免费在线阅读,需要了解更多关于【C++容器-顺序容器,关联容器 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。C++容器:顺序容器,关联容器
容器主要分为顺序容器和关联容器。
一,顺序容器
vector--连续存储的元素,单向的
list----由节点组成的不连续存储的双向鏈表
deque--连续存储的元素,双向的
1,顺序容器主要分为vector,deque,list。
2,容器内的元素类型必须至少满足2个条件:可复制和可赋值。
3,list容器的迭代器,不支持算术运算,不支持关系运算,也没有下标操作,只有最简单的自增自减相等不等运算。
4,所有的迭代器范围都是左闭合区间,[beg,end)包括beg,但不包括end
5,顺序容器定义的几种类型:
size_type容器大小
iterator迭代器,reverse_iterator逆序迭代器
const_iterator只读迭代器(指向的元素只读),const_reverse_iterator
difference_type迭代器的差值,可为负值
value_type元素类型
reference相当于value_type&,即指向迭代器对应的元素
const_reference相当于constvalue_type&
6,()()对应于iterator;()()对应于reverse_iterator,
注意,如果a是const的,那么iterator也必须是const_iterator的
7,添加元素的擦作
(t);在a末尾增加元素t;
(t);在a前端增加元素t,只使用于list和deque
(p,t);在迭代器p前面插入元素t,返回新元素的迭代器
(p,n,t);在迭代器p前面插入n个元素t,返回void
(p,b,e);在迭代器p前面插入迭代器b,e标记的范围内的元素,返回void
8,删除元素的操作
();删除a的最后一个元素,返回void,如果a为空,则函数未定义
();删除a的第一个元素,返回void;如果a为空,则函数未定义;只适用于list和deque
(p);删除迭代器p指向的元素,返回下一个元素的迭代器;
(b,e);删除迭代器b,e之间的元素,返回下一个元素的迭代器
();删除a的所有元素,返回void
9,容器空间大小的操作
()()最大元素个数
()bool值,指示a是否为空
(n,t)重置c的大小为n,且新增加的元素初始化为t。
10,()()指向iterator
()()指向reference
注意,vector<int>::referencelast=(),last1=*--();
,,
11,顺序容器的赋值操作
c1=c2;
(c2);c1c2互换
(b,e);将迭代器b,e之间的元素复制给c
(n,t);将c设置为n个值为t的元素
以上操作,都是首先删除c原来的所有元素后再进行的操作
二,顺序容器适配器(adaptor)
stack--后进先出的排列,类似堆#include<stack>
queue--先进先出的排列,队列
priority_queue--优先队列#include<queue>
1,适配器的初始化
适配器都是建立在某个顺序容器之上的。
stack<int>stk(deg);
其中,deg为deque<int>;
也就是说,创建适配器时,一般将一个顺序容器指定为其原本。
默认的stack和queue是基于deque实现的。
priority_queue则默认在vector上实现。
但是,实际上
statck可以建立在vector,list,deque任何一种容器之上
queue要求关联容器提供front操作,所以只有list和deque满足
priority_queue要求提供随机访问功能,所有只有vector和deque满足
如果适配器不是建在其默认类型上,则必须显式的指定其关联类型
stack<int,vector<int>>stk(ve);
其中ve为vector<int>类型。
2,栈适配器stack的使用
先进后出
()bool,空为true
()元素个数
()删除栈顶元素,但是不返回其值
()返回栈顶元素,但不删除其值
(item);在栈顶压入item元素
3,队列和优先级队列
先进先出,优先级队列则按照优先级
//queue队列容器有入队push()、出队pop()、读取队首元素front()、读取队尾元素back()、
//判断队列是否为空empty()、队列当前元素的数目size()
#include<queue>
#include<iostream>
usingnamespacestd;
intmain(void)
{
queue<int>q;
(1);
(2);
(3);
(9);
cout<<()<<endl;
cout<<()<<endl;
cout<<()<<endl;
cout<<()<<endl;
while(!())
{
cout<<()<<"";
();
}
cout<<endl;
return0;
}
priority_queue--优先队列
但她有一个特性就是队列中最大的元素总是位于队首,所以出队时,总是当前最大的元素出队。
()bool,空为true
()元素个数
()删除队首元素,但是不返回其值
()返回队首元素,但不删除其值
(item);在队首压入item元素
三,关联容器(associativecontainer)
map,multimap类--#include<map>
set,multiset类--#include<set>
关联容器,通过键存储和读取元素。顺序容器,通过元素在容器中的位置顺序存储和读取元素。
关联容器map的用法:
1,map的定义
map<k,v>m;k为键类型,v为值类型
map<k,v>m(m2);
map<k,v>m(b,e);将迭代器be之间的元素复制到m
2,键类型必须满足严格弱排序,即<一定要定义,且大于等于时都视为等于关系
如p1<p2,()<()||(!(()<)&&()<())
3,map的类型
map<k,v>::key_type键类型,而且是const的,constk
map<k,v>::mapped_type值类型,v
map<k,v>::value_type键-值对应的pair类型,pair<k,v>
4,使用下标访问map对象,可以直接添加新元素
map<string,int>w;w["ab"]=2;
如果w中不存在ab键,则会自动添加一个value_type,设置为"ab"--2
5,对map迭代器解引用,返回value_type
对map进行下标操作,返回mapped_type
6,(e);e为pair类型,如果其键不存在,则新建;如果键已经存在,则m不变;
返回值为pair类型,,,指示是否插入了该元素。
(beg,end);插入迭代器范围,返回void,规则同上
(iter,e);iter为迭代器,以iter为起点搜索,,如果没有,则插入e。返回一个迭代器,指

7,删除map中元素
(k);删除键k对应元素,返回删除个数(map中,只能为0或者1)
(p);删除迭代器p对应元素,返回void
(b,e);删除迭代器be之间元素,返回boid
8,检查map中键是否存在
(k)返回键k在m中出现的次数
(k)返回键k在m中首次出现的迭代器;不存在则返回末端迭代器
9,map中,内存存在方式类型list是不连续的。
所以,map的迭代器只有简单的自增自减操作,而且map中没有pushpop相关操作。
但是,map提供下标操作,只是它的下标操作和顺序容器是不一样的。
关联容器set:
set与map不同的地方在于:set仅有key_type类型,它的value_type也就是key_type;而且set不提供下标操作。
set也支持countfind操作,类似map。
关联容器multimapmultiset:
一个键可以对应多个实例
1,insert总会添加一个新元素,不管键是否存在
2,erase会删除拥有该键的所有元素
3,在multimap中,拥有相同键的元素是相邻存放的。

C++容器-顺序容器,关联容器 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数5
  • 收藏数0 收藏
  • 顶次数0
  • 上传人小小布
  • 文件大小158 KB
  • 时间2022-11-21