ACM竞赛常用STL(一)1

简介: s.resize(n, val)改变序列的长度,超出的元素将会被删除,如果序列需要扩展(原空间小于n),将用val 填满扩展出的空间。

全排列函数next_permutation

STL 中专门用于排列的函数(可以处理存在重复数据集的排列问题)


头文件:#include <algorithm>


using namespace std;


调用: next_permutation(start, end);


注意:函数要求输入的是一个升序排列的序列的头指针和尾指针.


用法:



// 数组

int a[N];

sort(a, a+N);

next_permutation(a, a+N);

// 向量

vector<int> ivec;

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

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

例子:

vector<int> myVec;

// 初始化代码

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

do{

   for (i = 0 ;i < size;i ++ ) cout << myVec[i] << " \t " ;

   cout << endl;

}while (next_permutation(myVec.begin(), myVec.end()));



ACM/ICPC 竞赛之STL--pair

STL 的<utility>头文件中描述了一个看上去非常简单的模板类pair,用来表示一个二元组或元素对,并提供了按照字典序对元素对进行大小比较的比较运算符模板函数。


例如,想要定义一个对象表示一个平面坐标点,则可以:


pair<double, double> p1;cin >> p1.first >> p1.second;pair 模板类需要两个参数:首元素的数据类型和尾元素的数据类型。pair 模板类对象有两个成员:first 和second,分别表示首元素和尾元素。


在<utility>中已经定义了pair 上的六个比较运算符:<、>、<=、>=、==、!=,其规则是先比较first,first 相等时再比较second,这符合大多数应用的逻辑。当然,也可以通过重载这几个运算符来重新指定自己的比较逻辑。除了直接定义一个pair 对象外,如果需要即时生成一个pair 对象,也可以调用在<utility>中定义的一个模板函数:make_pair。make_pair 需要两个参数,分别为元素对的首元素和尾元素。


在题1067--Ugly Numbers 中,就可以用pair 来表示推演树上的结点,用first 表示结点的值,用second 表示结点是由父结点乘以哪一个因子得到的。


#include <iostream>

#include <queue>

using namespace std;

typedef pair<unsigned long, int> node_type;

int main()

{

   unsigned long result[1500];

   priority_queue< node_type, vector<node_type>,

   greater<node_type> > Q;

   Q.push( make_pair(1, 2) );

   for (int i=0; i<1500; i++)

   {

       node_type node = Q.top(); Q.pop();

       switch(node.second)

       {

           case 2: Q.push( make_pair(node.first*2, 2) );

           case 3: Q.push( make_pair(node.first*3, 3) );

           case 5: 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;

   }

   return 0;

}



ACM/ICPC 竞赛之STL--vector

在STL 的<vector>头文件中定义了vector(向量容器模板类),vector容器以连续数组的方式存储元素序列,可以将vector 看作是以顺序结构实现的线性表。当我们在程序中需要使用动态数组时,vector 将会是理想的选择,vector 可以在使用过程中动态地增长存储空间。


vector 模板类需要两个模板参数,第一个参数是存储元素的数据类型,第二个参数是存储分配器的类型,其中第二个参数是可选的,如果不给出第二个参数,将使用默认的分配器。


下面给出几个常用的定义vector 向量对象的方法示例:38


vector<int> s;


定义一个空的vector 对象,存储的是int 类型的元素。


vector<int> s(n);定义一个含有n 个int 元素的vector 对象。


vector<int> s(first, last);定义一个vector 对象,并从由迭代器first 和last 定义的序列[first,last)中复制初值。


vector 的基本操作有:


s[i]直接以下标方式访问容器中的元素。


s.front() 返回首元素。


s.back() 返回尾元素。


s.push_back(x)向表尾插入元素x。


s.size() 返回表长。


s.empty() 当表空时,返回真,否则返回假。


s.pop_back() 删除表尾元素。


s.begin() 返回指向首元素的随机存取迭代器。


s.end() 返回指向尾元素的下一个位置的随机存取迭代器。


s.insert(it, x) 向迭代器it 指向的元素前插入新元素val。


s.insert(it, n, x)向迭代器it 指向的元素前插入n 个x。


s.insert(it, first, last)将由迭代器first 和last 所指定的序列[first, last)插入到迭代器it


指向的元素前面。


s.erase(it)删除由迭代器it 所指向的元素。


s.erase(first, last)删除由迭代器first 和last 所指定的序列[first, last)。


s.reserve(n)预分配缓冲空间,使存储空间至少可容纳n 个元素。


s.resize(n)改变序列的长度,超出的元素将会被删除,如果序列需要扩展(原空间小于n),元素默认值将填满扩展出的空间。


s.resize(n, val)改变序列的长度,超出的元素将会被删除,如果序列需要扩展(原空间小于n),将用val 填满扩展出的空间。


s.clear()删除容器中的所有的元素。


s.swap(v)将s 与另一个vector 对象v 进行交换。


s.assign(first, last)将序列替换成由迭代器first 和last 所指定的序列[first, last)。[first, last)不能是原序列中的一部分。要注意的是,resize 操作和clear 操作都是对表的有效元素进行的操作,但并不一定会改变缓冲空间的大小。另外,vector 还有其他一些操作如反转、取反等,不再一下列举。vector 上还定义了序列之间的比较操作运算符(>, <, >=, <=, ==, !=),


可以按照字典序比较两个序列。还是来看一些示例代码。输入个数不定的一组整数,再将这组整数按倒序输出,


如下所示:


#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> L;
    int x;
    while (cin>>x) L.push_back(x);
    for (int i=L.size()-1; i>=0; i--) 
        cout << L[i] << " ";
    cout << endl;
    return 0;
}
目录
相关文章
Echarts实战GEO3D和bar3D延迟显示动画发光柱图的练习(未成功)
Echarts实战GEO3D和bar3D延迟显示动画发光柱图的练习(未成功)
286 0
|
12月前
|
存储 资源调度 Java
计算机基础(1)——计算机体系结构和组成
计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。 在过去的几十年里,计算机科学经历了令人瞩目的飞速发展。经历了电子管、晶体管、集成电路的世代发展,体积越来越小、性能越来越强,为人类带来了巨大的便利和变革,下面我们来回顾计算机的发展历程。
3419 5
计算机基础(1)——计算机体系结构和组成
|
SQL 运维 Oracle
【迁移秘籍揭晓】ADB如何助你一臂之力,轻松玩转Oracle至ADB的数据大转移?
【8月更文挑战第27天】ADB(Autonomous Database)是由甲骨文公司推出的自动化的数据库服务,它极大简化了数据库的运维工作。在从传统Oracle数据库升级至ADB的过程中,数据迁移至关重要。
284 0
|
缓存 前端开发 JavaScript
构建高性能单页应用(SPA)的实践与优化
构建高性能单页应用(SPA)的实践与优化
346 7
|
缓存 负载均衡 监控
微服务架构下的接口性能优化策略####
在当今快速迭代的软件开发领域,微服务架构以其灵活性和可扩展性成为众多企业的首选。然而,随着系统复杂性的增加,接口性能问题日益凸显,成为制约用户体验与系统稳定性的关键因素。本文旨在探讨微服务架构下接口性能优化的有效策略,通过具体案例分析,揭示从代码层面到系统架构层面的全方位优化路径,为开发者提供实战指南。 ####
|
数据可视化 搜索推荐 BI
一套依托“电脑端+移动端”双端联合应用模式的智慧综合执法办案系统源码
智慧综合执法系统构建了线上指挥到监督的全流程工作模式,实现电脑端与移动端双平台协同作业。执法人员利用移动端实时记录、处理案件,并同步至电脑端。系统支持应急管理案件快速办理,具备法律法规智能引用、地理信息绑定等功能,确保流程标准化、规范化,提升执法效率与质量。此外,还提供案件登记、办理、统计分析及电子案卷生成等模块,配合电子支付系统,实现全方位智能执法管理。
436 0
一套依托“电脑端+移动端”双端联合应用模式的智慧综合执法办案系统源码
|
数据库 开发者
IntelliJ IDEA调试技巧:提升你的调试效率
调试是软件开发中不可或缺的一部分,而IntelliJ IDEA提供了一套强大的调试工具,可以帮助开发者更高效地定位和解决问题。本文将分享一些高手必会的IDEA调试技巧,让你在调试时如虎添翼。
339 0
|
人工智能 供应链 搜索推荐
3D打印:从原型制作到制造业的颠覆性变革
【9月更文挑战第14天】3D打印技术以其独特的增材制造方式,在材料、工艺、设备等方面取得显著进步,从原型制作跨越至直接生产,推动制造业转型升级。它加速了设计与创新,使复杂结构成为可能;按需制造特性颠覆了生产模式,降低了库存成本,提高了市场响应速度;同时催生了新的商业模式,如定制化服务和平台运营。尽管面临材料成本和技术成熟度等挑战,但3D打印技术正逐步普及,未来将在智能化和网络化方向上持续发展,引领制造业迈向更高效、定制化的未来。
|
自然语言处理
如何使用GPT-4 生成高效实用的PPT
如何使用GPT-4 生成高效实用的PPT
1068 1
|
C++ 容器
【C++】string类的使用①(迭代器接口begin,end,rbegin和rend)
迭代器接口是获取容器元素指针的成员函数。`begin()`返回首元素的正向迭代器,`end()`返回末元素之后的位置。`rbegin()`和`rend()`提供反向迭代器,分别指向尾元素和首元素之前。C++11增加了const版本以供只读访问。示例代码展示了如何使用这些迭代器遍历字符串。