美文网首页IT@程序员猿媛
机试练习总结02:C++ STL初步

机试练习总结02:C++ STL初步

作者: keeeeeenon | 来源:发表于2019-04-30 08:51 被阅读62次

笔记内容来源:《算法竞赛经典入门》(第二版) 刘汝佳著 第5章

一、基本概念

STL是指C++的标准模板库(Standard Template Library)。

二、排序与检索

sort函数,可以对任意对象进行排序,不一定是内置类型。

如果希望用sort函数排序,这个类型需要定义“小于”运算符,或者在排序时传入一个“小于”函数。排序对象可以存在普通数组或vector里。普通数组用sort(a, a+n)调用,后者用sort(v.begin(), v.end())方式调用。

sort是模板函数,在algorithm头文件里。

三、不定长数组vector

若a是一个vector:

a.size()是数组大小

a.resize()是改变大小

a.push_back()是向尾部添加元素

a.pop_back()是删除最后一个元素

声明方法:vector<int> a;

四、集合set

每个元素最多出现一次

可以用自定义类型构造set,需要定义“小于”运算符。

set具有其中元素会从小排到大的性质。

声明:set<string> dict;

dict.begin(), dict.end()

set迭代器的概念(和for循环类似)

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">for(set<string>::iterator it = dict.begin(); it!=dict.end();++it)
cout<<*it<<"\n";</pre>

五、映射map

map就是从key到value的映射,[]运算符被重载

声明:map<string, int> month_name;

month_name["July"] = 7;

set和map都支持insert, find, count, remove等操作,并且可以按照从小到大的顺序循环遍历其中的元素。

六、栈、队列与优先队列

1. 栈

栈定义在头文件<stack>中

声明方式:stack<int> s;

push(), pop()。

2. 队列

队列定义在头文件<queue>中

声明方式:queue<int> q;

push(), pop(), front()取队首元素但不删除。

3. 优先队列

优先队列是一种抽象数据类型,行为有点像队列。

但先出队列的不是先进队列的元素,而是队列中优先级最高的元素

优先队列也定义在头文件<queue>中

声明方式:priority_queue<int> pq; ===>这个pq是一个“越小的整数优先级越低的优先队列”。

自定义类型也可以组成优先队列,但必须为每个元素定义一个优先级。这个优先级并不需要一个确定的数字,只需要能比较大小就行。

可以定义一个结构体cmp,重载“()”运算符,使其看上去像一个函数,然后用如下方式声明优先队列:

priority_queue<int, vector<int>, cmp> pq;

cmp可以定义为如下形式:

[ 复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">struct cmp{ bool operator() (const int a, const int b) const { //a的优先级比b小时返回true
return a % 10 > b % 10;
}
} </pre>

[ 复制代码

](javascript:void(0); "复制代码")

其他常见的优先队列:

“越小整数优先级越大”的优先队列:priority_queue<int, vector<int>, greater<int> > pq;

push(), pop(), top()取队首元素(但不删除)。

相关文章

  • 机试练习总结02:C++ STL初步

    笔记内容来源:《算法竞赛经典入门》(第二版) 刘汝佳著 第5章 一、基本概念 STL是指C++的标准模板库(St...

  • c++ 常用STL整理

    最近在练习C++编程,做了一些牛客和力扣上面的题目,发现常用的C++ STL 有以下几种,对此进行简要总结,以便自...

  • 算法笔记 晴神(胡凡等著) 完整pdf下载

    C/C++快速入门、入门模拟、算法初步、数学问题、C++标准模板库(STL)、数据结构专题(二章)、搜索专题、图算...

  • #拖延症# 需要看的文章的记录

    C++ 对vector等STL标准容器进行排序操作--csdn该篇文章通过对vector排序的总结,明白stl是一...

  • 读书笔记17.06.03

    C++ STL:Listlist是C++标准模版库(STL,Standard Template Library)中...

  • [C++] STL 容器

    参考:[C++] STL 容器 (一) - 基本介紹[C++] STL 容器 (二) - Iterator 部分示例:

  • C++ STL总结

    刷leetcode用到的STL总结: map m由许多键值对组成(可以理解为pair< k, v>),...

  • C++ STL 学习笔记

    C++ STL 学习笔记

  • 程序排序小记

    写在前面:很久没写过c/c++了,准备机试,练习ing 遇到的问题 怎么循环接收数据?while(cin>>num...

  • STL之参考文献

    C++标准库是离不开模板的,STL占了C++标准库80%以上。 学习STL(c++ 98)的主要参考: gcc 3...

网友评论

    本文标题:机试练习总结02:C++ STL初步

    本文链接:https://www.haomeiwen.com/subject/vnrdgqtx.html