STL、线段树代码库
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STL
| 全排列函数next_permutation
STL 中专门用于排列的函数(可以处理存在重复数据集的排列问题)
头文件:#include
using namespace std;
调用: next_permutation(start, end);
注意:函数要求输入的是一个升序排列的序列的头指针和尾指针.
用法:
// 数组
int a[N];
sort(a, a + N);
next_permutation(a, a + N);
// 向量
vector
sort(ivec.begin(), ivec.end());
next_permutation(ivec.begin(), ivec.end( ));
例子:
vector
// 初始化代码
sort(myVec.begin(), myVec.end());
do
{
for (i = 0 ; i < size; i ++ ) cout < < myVec[i] << " \t " ;
cout << endl;
}
while (next_permutation(myVec.begin(), m yVec.end()));
ACM / ICPC 竞赛之STL 简介
一、关于STL
STL(Standard Template Library,标准模板库)是C++ 语言标准中的重
要组成部分。STL 以模板类和模板函数的形式为程序员提供了各种数据结构和
算法的精巧实现,程序员如果能够充分地利用STL ,可以在代码空间、执行时
间和编码效率上获得极大的好处。
STL 大致可以分为三大类:算法(algorithm) 、容器 (container) 、迭代器
(iterator)。
STL 容器是一些模板类,提供了多种组织数据的常用方法,例如vector(向量,
类似于数组) 、list( 列表,类似于链表) 、deque(双向队列) 、set(集合) 、
map(映象) 、stack( 栈) 、queue( 队列) 、priority_queue(优先队列) 等,
通过模板的参数我们可以指定容器中的元素类型。
STL 算法是一些模板函数,提供了相当多的有用算法和操作,从简单如
for_each (遍历)到复杂如stable_sort (稳定排序)。
STL 迭代器是对C 中的指针的一般化,用来将算法和容器联系起来。几乎所有
的STL 算法都是通过迭代器来存取元素序列进行工作的,而STL 中的每一个
容器也都定义了其本身所专有的迭代器,用以存取容器中的元素。有趣的是,
普通的指针也可以像迭代器一样工作。
熟悉了STL 后,你会发现,很多功能只需要用短短的几行就可以实现了。通过
STL ,我们可以构造出优雅而且高效的代码,甚至比你自己手工实现的代码效
果还要好。
STL 的另外一个特点是,它是以源码方式免费提供的,程序员不仅可以自由地
使用这些代码,也可以学习其源码,甚至按照自己的需要去修改它。
下面是用STL 写的题Ugly Numbers的代码:
#include
#include
using namespace std;
typedef pair
int main()
{
unsigned long result[1500];
priority_queue < node_type, vector
greater
Q.push( make_pair(1, 2) );
for (int i = 0; i < 1500; i++)
node_type node = Q.top();
Q.pop();
switch(node.second)
{
case2:
Q.push( make_pair(node.first * 2, 2) );
case3:
Q.push( make_pair(node.first * 3, 3) );
case5:
Q.push( make_pair(node.first * 5, 5) );
}
result[i] = node.first;
}
int n;
cin >> n;
while (n > 0)
{
cout << result[n-1] << endl;
cin >> n;
}
return0;
}
在ACM 竞赛中,熟练掌握和运用STL 对快速编写实现代码会有极大的帮助。
二、使用STL
在C++ 标准中,STL 被组织为以下的一组头文件(注意,是没有.h后缀的!):
algorithm / deque / functional / iterato r / list / map
memory / numeric / queue / set / stack / utility / vector
当我们需要使用STL 的某个功能时,需要嵌入相应的头文件。但要注意的是,
在C++ 标准中,STL 是被定义在std 命名空间中的。如下例所示:
#include
int main()
{
std::stack
s.push(0);