STL、线段树代码库

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 ivec;

sort(ivec.begin(), ivec.end());

next_permutation(ivec.begin(), ivec.end( ));

例子:

vector myVec;

// 初始化代码

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 nod e_type;

int main()

{

unsigned long result[1500];

priority_queue < node_type, vector,

greater > Q;

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;

s.push(0);

相关文档
最新文档