吐血共享C++ primer(第四版)学习笔记 - 图文(5)

2019-08-30 22:05

除了顺序容器,标准库还提供了三种顺序容器适配器:queue,prority_queue,stack。 容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。 适配器通用的操作和类型 见 27 适配器通用的操作和类型。

使用适配器时,必须包含相关的头文件: #include #include

初始化:strck stk(deq); //deq是deque类型的容器。 覆盖基础容器类型:通过将一个顺序容器指定为适配器的第二个类型实参,可覆盖其关联的基础容器类型:

stack> str_stk2(svec);

stack栈可以建立在vector,list,或者deque容器上,queue适配器要求其关联的容器必须提供push_queue运算,因此只能建立在list容器上,priority_queue适配器要求随机访问,因此只能建立在vector或deque容器上。

栈容器适配器支持的操作 见 28 栈容器适配器支持的操作

s.empty() s.size() s.pop() s.top() s.push(item)

标准库提供了两个风格的队列:FIFO队列(简称queue)和优先级队列(priority queue)。 priority queue允许用户为队列中存储的元素设置优先级,新元素是放在比它优先级低的元素前面,使用<操作符来确定它们之间的优先级关系。

队列和优先级队列支持的操作 见 29 队列和优先级队列支持的操作

q.empty() q.size() q.pop() q.front()---只适用于队列 q.back()---只适用于队列 q.top()---只适用于优先级队列 q.push(item) 第十章 关联容器

关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。

关联容器支持通过键来高效地查找和读取元素,两个基本的关联容器类型是map和set,map的元素以键-值(key-value)对的形式组织:键用于元素在map中的索引,而值则表示所存储和读取的数据,set只包含一个键,并有效地支持关于某个键是否存在的查询。 关联容器类型:见 30 关联容器类型

map set multimap multiset

set和map类型不允许为同一个键添加第二个元素,如果一个键必须对应多个实例,则需要使用multimap或multiset类型

pair类型(定义在utility头文件中)提供的操作 见 31 pair类型提供的操作

pair p1 pair p1(v1, v2) make_pair(v1, v2) p1

pair anon pair word pzir> line

pair anon(“Jamer”, “skh”) 使用typedef简化:

typedef pair Anthor; Anthor proser(“ksh”, “wjj”);

pair类型可直接访问其数据成员:其数据成员都是公有的,命名为first和second。只需要使用点操作符即可访问其成员。如:author.first ==”ksh”; pair next_anth; strinf first, last;

while (cin >> first >> last) {

next_anth = make_pair(first, last);}

关联容器提供的操作 见 31 关联容器提供的操作

map对象:需要包含map头文件。定义map对象时,需要同时指定键和值的类型。 map构造函数: map m; map m(m2); map m(b, e); map xors_count;

对于键类型,唯一的约束就是必须支持<操作符。 map定义的类型 见 31 map定义的类型

map ::key_type map::mapped_type map::value_type -------一个pair类型,

它的first元素具有const map::key_type类型,而second元素则为 map::mapped_type类型。

value_type是pair类型,它的值成员可以修改,但是键值不能修改。 map迭代器进行解引用将产生pair类型的对象。 map下标操作符返回一个mapped_type类型的值。

对于map容器,下标所表示的键在容器中存在,则返回值,不存在,则添加新元素。 map xord_count; string word;

while (cin >> word) ++word_count[word];

map容器提供的insert操作 见 32 map容器提供的insert操作

m.insert(e) m.insert(beg, end) m.insert(iter, e) 以insert代替下标运算:

word_cont.insert(map::value_type(“Anna”, 1)); 记住:value_type是pair类型的同义词 简化以上操作:

word_count.insert(make_pair(“Anna”, 1));

或者typedef map::value_type valType; void_count.insert(valTpye(“Anna”, 1));

下标操作符给出了读取一个值的最简单的方法: map word_count;

int occurs = word_count[“foobar”];

该操作存在一个危险的副作用:如该键不在map容器中,那么下标操作会插入一个具有该键的新元素。 所以,map容器提供了两个操作:count和find,用于检查某个键是否存在而不会插入该键。 m.count(k)----返回m中k出现的次数(对于map返回值只能是1或者0) m.find(k)-----如果m容器中存在按k索引的元素,则返回指向该元素的迭代器,如果不存在,则返回超出末端迭代器。 读取元素而不插入该元素:

int occurs = 0;

map::iterator it = word_count.find(“foobar”); if (it != word_count.end()) occurs = it->second;

从map容器中删除元素 见 33 从map容器中删除元素

m.erase(k) m.erase(p) m.erase(b, e)

map对象的迭代遍历:map也提供begin和end运算

map::const_iterator map_it = word_count.begin(); if (map_it != word_count.end()){

cout << map_it->first <<”” << map_it->second <

set容器只是单纯的键的集合,当指向知道一个值是否存在时,使用set容器是最适合的 set类型 见 34 set类型


吐血共享C++ primer(第四版)学习笔记 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:电子测量自测题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: