【常用技巧】标准模板库(STL)

在前几个章节中我们已经使用了诸如队列、堆、堆栈、vector 等标准模板库中的模板,切身感受到了它给我们带来的极大便利。在本节中,我们还要介绍两种标准模板——string 和 map,了解他们又会给我们带来怎样的便利。

string 对象,顾名思义即用来保存和处理字符串的标准模板。我们介绍其相关的操作。

例 8.1 字符串的查找删除 

时间限制:1 秒   内存限制:32 兆

题目描述

给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。

输入

输入只有 1 组数据。 输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。

输出

删除输入的短字符串(不区分大小写)并去掉空格,输出。

样例输入

  1. in
  2. #include
  3. int main()
  4. {
  5.  
  6. printf(" Hi ");
  7. }

样例输出

  1. #clude
  2. tma()
  3. {
  4.  
  5. prtf("Hi");
  6. }

注:将字符串中的 In、IN、iN、in 删除。

解题代码

  1. #include<cstdio>
  2. #include<string>
  3. #include<iostream>
  4. #include<ctype.h>
  5.  
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10. char str[];
  11. gets(str);//输入短字符串
  12. string a = str;//将其保存在a中
  13. for (int i = ; i < a.size(); i++)a[i] = tolower(a[i]);//将a中的字符全部改成小写
  14. while (gets(str))//输入长字符串
  15. {
  16. string b = str, c = b;//将字符串保存至b,c
  17. for (int i = ; i < b.size(); i++)b[i] = tolower(b[i]);//将b中的字符全部改成小写,以便匹配
  18. int t = b.find(a, );//在b中查找a的位置
  19. while (t != string::npos)//若查找成功,则重复循环
  20. {
  21. c.erase(t, a.size());//删除c中相应位置字符,c为原串
  22. b.erase(t, a.size());//删除b中相应位置字符,b是改为小写字符的串
  23. t = b.find(a, t);//继续查找b中下一个出现字符串a的位置
  24. }
  25. t = c.find(" ", );//查找c中的空格
  26. while (t != string::npos)
  27. {
  28. c.erase(t, );
  29. t = c.find(" ", );
  30. }//删除c中所有空格
  31. cout << c << endl;
  32. }
  33. return ;
  34. }

上面我们主要讨论了string在机试中的用途,接下去我们还要介绍标准模板库中另一个十分实用的标准对象——map。 其功能为将一个类型的变量映射至另一类型。我们用一个例题,介绍和展示其用处和用法。

例 8.2 产生冠军

时间限制:1 秒   内存限制:32 兆

题目描述

有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。
球赛的规则如下:如果 A 打败了 B,B 又打败了 C,而 A 与 C 之间没有进行过比赛,那么就认定,A一定能打败 C。

如果 A 打败了 B,B 又打败了 C,而且,C 又打败了 A,那么 A、B、C 三 者都不可能成为冠军。

根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。

输入

输入含有一些选手群,每群选手都以一个整数 n(n<1000)开头,后跟 n 对选手的比赛结果,比赛结果以一对选手名字(中间隔一空格)表示,前者战胜后者。 如果 n 为 0,则表示输入结束。

输出

对于每个选手群,若你判断出产生了冠军,则在一行中输出“Yes”,否则在一行中输出“No”。

样例输入

  1. Alice Bob
  2. Smith John
  3. Alice Smith
  4.  
  5. a c
  6. c d
  7. d e
  8. b e
  9. a d

样例输出

  1. Yes
  2. No

解题代码

学完图之后再来写。

【常用技巧】标准模板库(STL)的更多相关文章

  1. C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

    摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...

  2. 标准模板库--STL

    标准模板库STL 1.泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用 C++中有两个方面体现重用: 1.面向对象的思想:继承和多态,标准类库 2.泛型程序设计(generic progra ...

  3. 标准模板库(STL)学习探究之stack

    标准模板库(STL)学习探究之stack queue priority_queue list map/multimap dequeue string

  4. 标准模板库(STL)学习探究之vector容器

    标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...

  5. C++ 标准模板库(STL)

    C++ 标准模板库(STL)C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), ...

  6. STL学习系列之一——标准模板库STL介绍

    库是一系列程序组件的集合,他们可以在不同的程序中重复使用.C++语言按照传统的习惯,提供了由各种各样的函数组成的库,用于完成诸如输入/输出.数学计算等功能. 1. STL介绍 标准模板库STL是当今每 ...

  7. 实验8 标准模板库STL

    一.实验目的与要求: 了解标准模板库STL中的容器.迭代器.函数对象和算法等基本概念. 掌握STL,并能应用STL解决实际问题. 二.实验过程: 完成实验8标准模板库STL中练习题,见:http:// ...

  8. C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用

    摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解,即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第二篇.主要针对线性表中的链表 ST ...

  9. C++ 标准模板库STL 队列 queue 使用方法与应用介绍

    C++ 标准模板库STL 队列 queue 使用方法与应用介绍 queue queue模板类的定义在<queue>头文件中. 与stack模板类很相似,queue模板类也需要两个模板参数, ...

  10. 【c++】标准模板库STL入门简介与常见用法

    一.STL简介 1.什么是STL STL(Standard Template Library)标准模板库,主要由容器.迭代器.算法.函数对象.内存分配器和适配器六大部分组成.STL已是标准C++的一部 ...

随机推荐

  1. python 查询文件存放地址

    import os, time import sys import re def search(path,name): for root, dirs, files in os.walk(path): ...

  2. Properties 取值和设置函数 Hashtable的静态内部类Entry的结构和克隆方法

  3. NSData、数据结构与数据转换

    数据结构公式:Data_Structure=(D,R): 只要数据元素与数据(组织关系)能够保持:同一个数据(结构)可以在各种存贮形式间进行转换. 字节流或字符串是所有转化的中间节点(中转站).相当于 ...

  4. OpenCV 学习笔记(1-1)opecv3.41及其扩展库在VS2015下配置

    其他正常 opencv_aruco341.lib opencv_bgsegm341.lib opencv_bioinspired341.lib opencv_calib3d341.lib opencv ...

  5. python3.7 win10配置opencv和扩展库

  6. 信噪比(signal-to-noise ratio)

    SNR或S/N,又称为讯噪比.是指一个电子设备或者电子系统中信号与噪声的比例.这里面的信号指的是来自设备外部需要通过这台设备进行处理的电子信号,噪声是指经过该设备后产生的原信号中并不存在的无规则的额外 ...

  7. MongoDB 企业版4.2.2安装

    一.下载企业版MongoDB安装RPM包 https://www.mongodb.com/download-center/enterprise 二.安装MogoDB4.2.2企业版 1.安装依赖包 n ...

  8. rushjs来自微软的单体仓库管理工具

    rushjs 是来自微软的单体仓库管理工具 ,与lerna 类似但是使用上稍显复杂 安装 npm install -g @microsoft/rush   简单使用 一个传统的基于npm 的处理 ~$ ...

  9. Quartus RTL Simulation

    今天在做某个module的RTL Simulation时,发现之前的do文件有问题,导致信号没有导入.将sim中的XXX_tb设置成了XXX所致.改正后无误. 可参考: https://www.cnb ...

  10. MySQL性能优化 分区

    简述 分区是指根据一定的规则,数据库将表分解为多个更小的,更容易管理的部分,就访问数据库而言,逻辑上只有一张表或一个索引,但实际上这张表可能又多个物理分区共同构成,每一个分区都是一个独立的对象,可以独 ...