STL容器的高级玩法

写在前面:本人于2020PAT甲级取得满分(见本人其他博客),在刷题过程中我有了很多自己的小经验和技巧,在这里分享给大家,祝大家刷题顺利,早日拿到免费的PAT徽章~~

注意:这里是分享小技巧,并不是全面介绍容器,此处默认你已经掌握了容器的基本用法!

1. Vector

大名鼎鼎的Vector,动态数组嘛,用起来很方便,但是你可知道vector不仅仅是动态数组,它还可以是队列/优先队列,栈?

Vector变成队列和栈的关键函数

  • erase
    你会不会感到很疑惑?删除函数有什么了不起的?竟然还能玩出花样?
    君莫急,且看:
vector<int>V;
V.push_back(1);
V.push_back(2);
V.push_back(3);
V.push_back(4);

对于栈很简单,使用:

V.erase(--V.end());
V.erase(V.rbegin());//与上面等价!
V.pop_back();

这就完成了删除最后一个元素操作!
立即推,vector等于stack,所以完全没必要去熟悉stack容器!

  • erase变队列
V.erase(V.begin());

这样就实现了删除第一个元素,这就是vector版的队列!!
至于优先队列(自定义排序顺序),可以在所有元素进入vector以后使用sort函数自定义cmp,然后实现优先队列(效率相同!!)

sort(V.begin(),V.end(),cmp);
//cmp为自定义比较关系
+
  • Vector变双端队列
V.insert(V.begin,1);

这样就在最前面插入了元素1,通过以上操作

vector在保持动态数组的同时 还是队列,双端队列,栈,优先队列!

除此之外,还有冷门Vector用法!!!!!

1.更方便的判等!

vector<int.>V1,V2;
if(V1==V2) printf(“Yes”);
else printf(“No”);

两个Vector之间可以直接用==进行判等,只有存储的元素完全相同的时候才会true

2.更方便的判断元素大小

if(V1<V2)printf("Yes");

如:

V1:1 2 2 4
V2:1 2 3 1

那么V1<V2就是true

作用:在题目要求出现不唯一的答案时,按小序列输出,通过利用sort函数可以对vector大小可以排序,然后输出第一个即可!

2.map的高级玩法**

  • 用来对数字进行排序,效率无敌快!
    比如:
int val;
map<int,int>Ma;
for(int i=0;i<N;i++
{scanf("%d",&val);Ma[val]++;
}
//这样得到的map就是有序系列,可以直接输出!!
for(auto it=Ma.begin();it!=Ma.end();it+){for(int j=0;j<it->second;j++){printf(" %d",it->first);}
}

强不强!!这样排序的效率远超过了set/underorder_set!!!
利用second值也可以避免重复!!!
一举两得,非常棒!!!

  • Map用来哈希映射字符串
map<string,int>Ma;
map<int,string>Mb;
string s;
int index =1;
for(int i=0;i<N;i++){cin>>s;if(Ma[s]!=0)continue;//0不存数据,下标从1开始,已经映射过的就跳过,不再映射。Ma[s]=index;Mb[index]=s;index++;
}

这样就把string变成了int,访问直存直取,效率无敌!!!

3.字符串string的玩法~

1.find函数

find既可以找单个字符,也可以找 字符串
如:

除此之外,还有另外的几个find函数:

看名字就能懂他们的作用

rfind是find的逆序,find是从前往后,rfind就是从后往前找

string最优秀的是操作方便,可以直接用+进行连接,在很多题目中用起来简直舒服到爆,比如2018年真题中的运算树,递归遍历,string控制输出格式太好用了。
再比如1088题:1088 Rational Arithmetic (20分)

#include<vector>
#include<iostream>
#include<math.h>
#include<string>
#include<algorithm>
#include<string>
using namespace std;
long long gcd(long long a, long long b) {if (b == 0) return a;else return gcd(b, a%b);
}
string simple(long long  a, long long b) {string ans;if ((a > 0 && b < 0) || (a < 0 && b>0))ans = "-";a = abs(a);b = abs(b);if (a == 0)return "0";if (b == 0)return "Inf";long long t = gcd(a, b);a /= t;b /= t;long long z = a / b;a -= z * b;if (z > 0 && a > 0) {ans += to_string(z) + " " + to_string(a) + "/" + to_string(b);}else if (z > 0) {ans += to_string(z);}else {ans += to_string(a) + "/" + to_string(b);}if (ans[0] == '-')return "(" + ans + ")"else return ans;
}
int main() {;long long a1, a2, b1, b2;scanf("%lld/%lld %lld/%lld", &a1, &a2, &b1, &b2);string s1 = simple(a1, a2);string s2 = simple(b1, b2);printf("%s + %s = %s\n", s1.c_str(), s2.c_str(), simple(a1*b2 + b1 * a2, a2*b2).c_str());printf("%s - %s = %s\n", s1.c_str(), s2.c_str(), simple(a1*b2 - b1 * a2, a2*b2).c_str());printf("%s * %s = %s\n", s1.c_str(), s2.c_str(), simple(a1*b1, a2*b2).c_str());if(abs(b1)==0)printf("%s / %s = Inf\n", s1.c_str(), s2.c_str());else printf("%s / %s = %s\n", s1.c_str(), s2.c_str(), simple(a1*b2, a2*b1).c_str());return 0;
}

近几年每次基本上都要考一个 字符串运用的题目。

近几年的大趋势是模板题越来越少了,以前很多题目都是固定套路,后面的题目反而简单,虽然看起来复杂一些。

近几年题目基本上都是给你一个概念, 让你读题理解,然后再利用已知知识去自由发挥emm,所以背解题模板没有用,背代码也没有用,只有通过自己不断的去理解各种知识,真正掌握熟练了才是王道。

助力PAT甲级/乙级取得满分的小技巧,STL容器相关推荐

  1. PAT 甲级考试终于满分了

    竟然有两份证书.申通快递把证书撕坏了好气啊. 先留个坑,这应该是个经验贴,等我有时间/心情的时候再说吧.

  2. SAP小技巧 DOCKING容器解决分辨率问题

    一 前言 通过SAP ENJOY演示中心可以学习SAP常用容器的用法(TCODE: DWDM ) 其中有5个DEMO程序介绍不同的容器 自定义容器 固定容器(DOCKING容器) 拆分器容器 easy ...

  3. PAT甲级考试知识点总结和一些看法

    0 引言 本人今年PAT甲级考了95分,平时力扣也有再刷(大概有360题),感觉PAT主要还是面向考研党的,里面的题目其实难度是小于力扣的,但这种难度的题目浙大去年考研机试居然有20%的0分我其实不是 ...

  4. 2019年12月PAT甲级满分备考经验

    PAT甲级满分备考经验 答题过程 备考经验 答题过程   总得来说,我觉得我幸运,碰上了一次PAT甲级题目相当简单(1085中有190人满分),最终提前一小时交卷,实时排名为35.   我按照1 2 ...

  5. 2020年9月PAT甲级满分必备刷题技巧

    2020年7月的考试结束了,除了本次的考题更新,短期内不会更新. [7月题目的特点:首次线上考试,没出链表.树相关的模板题,第2到4题背景新颖,大大降低了抄袭历年代码的可能性,可以看作是线上考试的新趋 ...

  6. PAT学习资料汇总(PAT甲级、PAT顶级、PAT考试经验)

    二.PAT甲级 PAT甲级真题目录(按题型整理) PAT甲级真题目录(按题型整理)_love music.的博客-CSDN博客_pat甲级真题 PAT甲[所有题目+解析+代码示例+总结]附带所有历年整 ...

  7. 2021.9.11周六PAT甲级考试复盘与总结

    周六PAT甲级考试复盘与总结 先说结论:仍未步入"高手"行列:现在的学习节奏与方法是对的,有十万分的必要坚持下去. 题目 知识点 分数 T1 前缀和.二分 11 / 20 T2 排 ...

  8. 2019秋季PAT甲级考试总结:努力+策略+运气

    鉴于这两天有很多网友联系我问这次考试的题解,所以我干脆就花点时间把C++题解整理出来了,见文末 经过一两个月的备战PAT,在今天终于画上了一个圆满的句号,取得了满分的成绩. 我是在南京的金陵科技学院考 ...

  9. PAT甲级训练合集(1-70)

    本章题解跳转 考点 P1001 数字的数组表示和处理 P1002 多项式的数组表示和处理 P1003 深度优先搜素 P1004 深度优先搜素 P1005 哈希表 P1006 P1007 数组子区间求和 ...

最新文章

  1. php多选框怎么传值,tp3.2如何处理多选框传参和判断状态
  2. 【网络安全】Xred蠕虫再分析及修复工具编写
  3. 成绩排序 九度教程c语言,九度OJ 1089 数字反转
  4. 10几行代码,用python打造实时截图识别OCR
  5. hadoop合并日志_Hadoop深入学习:HDFS主要流程——SNN合并fsimage和编辑日志
  6. 免费下载IEEE论文的网站
  7. 多商户商城系统如何对接电商收付通?
  8. Python保留两位小数,并做四舍五入处理
  9. vb rs.RecordCount返回0的原因
  10. EasyMicroPlot: 一种快速进行微生物下游分析的整合R包
  11. 由 Apache Kylin 组建的 Kyligence 公司获得数百万美元的天使轮投资
  12. 读《饥饿的盛世-乾隆时代的得与失》
  13. FCPX注释解说文字标题插件:motionVFX mCallouts Simple 2
  14. shell的字符串截取
  15. Ramdisk虚拟内存盘,Swap分区
  16. UML图之类图,对象图和包图
  17. Vue Hello world
  18. MySQL用年、月、日、季度、周分别统计数据
  19. 儿童玩具和儿童用品美国CPC认证ASTM测试CPSIA标准大合集
  20. RecyclerView 源码分析

热门文章

  1. Python批量合并处理B站视频
  2. [转] slave_exec_mode=IDEMPOTENT的行为小结
  3. python面试整理
  4. 电子游戏设计与制作 第一章 计算机游戏概述
  5. Win10如何设置快速锁屏?电脑怎么设置离开锁屏?
  6. 医保结余7600亿匮
  7. 期货平仓/强制平仓/爆仓-股市平仓建仓
  8. linux /etc/motd,Linux 修改进站提示 /etc/motd
  9. android h5富文本编辑器,H5富文本编辑器的详细介绍
  10. mysql生成18位纯数字id_MySQL实现注册时随机生成数字id,类似于注册qq时随机生成qq号...