STL 提供三种类型的组件:容器、迭代器和算法,它们都支持泛型程序设计标准。在ACM中充分利用STL可以大大的简化程序,提高解题效率。
1、容器主要有两类:顺序容器和关联容器。顺序容器(vector/list/deque/string)等是一系列元素的有序集合。关联容器(set/multiset/map/multimap)包含查找元素的键值。
2、迭代器的作用是遍历容器。
3、STL算法库包含四类算法:排序算法,不可变算法,变序算法和数值算法。
常用的容器:
1、vector
Vector的内存管理是这样的,在分配小于等于128个字节的内存的时候,采用内存池的方式,否则也是直接每次都调用C的malloc函数。
vector<int> v;
v.push_back(data);
for(vector<int>::iterator it = v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
accumulate(v.begin(),v.end(),0); //从begin加到end,再加0
也可以用定义数组的方式:
vector<int> v(3);
v[0]=3;
v[1]=4;
v[2]=8;
cout<<v[0]<<" "<<v[1]<<" "<<v[2]<<endl;
vector v 定义之后,下面可以用v[i]来访问
vector的插入:vec.insert(vec.begin()+i,20);
vector的删除:vec.erase(v.begin+i); //删除第i+1个元素
vec.erase(v.begin,v.begin()+3);//删除第一到第四个元素
vec.clear(); //全部清除
vector的反转:#include<algorithm> reverse(v.begin(),v.end());
其实数组也可以用这个函数来反转
vec.size()
vec.empty()-->bool
用sort来排序,引入algorithm头文件
sort(v.begin(),v.end()); //默认的是升序排列
也可以自定义比较函数
bool Comp(const int &a, const int &b)
{
if(a!=b) return a>b; //这是为了在相信
else return a>b;
}
然后调用:sort(v.begin(),v.end(),Comp);
2、string
string str = "lingyibin";
string::iterator it=str.begin();
然后再for,和vector一样。
str.replace(3,1,"g"); //3是从0开始算的
str.compare("ling"); //str大,则返回1,等则0,小则-1
str用printf输出:printf(str.c_str());
str.find('d'); //返回找到的位置,找不到时返回-1
str.find("yi");
当然string也可以通过str[i]这种格式来访问,得到的结果是一个char
把char[]数组赋值给string的可以,但反过来就不行了。
3、set
set集合是一个实现了红黑树的平衡二叉检索树。
里面的元素不会重复,而且是有序。
如:
set<int> s;
s.insert(34);
s.insert(3);
s.insert(27);
s.insert(31);
s.insert(3);
for(set<int>::iterator it = s.begin(); it != s.end(); it ++)
{
cout<<*it<<endl;
}
结果是:
3
27
31
34
反向遍历set:
set<int>::reverse_iterator rit;
for(rit = s.rbegin();rit!=s.rend();rit++) cout<<*rit<<endl;
it = s.find(21);
if(it!=s.end()) //找到
cout<<"找到了"<<endl;
else cout<<"没找到"<<endl;
//set的自定义比较函数
struct myCmp
{
bool operator()(const int &a,const int &b)
{
return a>b;
}
};
set<int,myCmp> mySet;
//如果set里面是一个结构体的话,直接把比较函数写到结构体里面
struct Info
{
string name;
double score;
bool operator < (const Info &a) const
{
return a.score < score;
}
}
4、map 和set一样,也是红黑树结构,不允许重复,用法和set差不多
map<int,string> m;
for(it = m.begin(); it != m.end(); it++)
{
cout<<(*it).first<<" : "<<(*it).second<<endl;
}
map的查找:
map<int,char>::iterator it;
it = m.find(28);
if(it!=m.end()) ……//说明找到了
5、双向队列:deque(头进尾出)
d.push_back(2);//从后端推入
d.push_front(3);//从后端推入,并覆盖已有元素
d.insert(d.begin()+2,89);//中间插入,会覆盖原来的元素
d.pop_back();//从尾部删除
d.pop_front();//从头部删除
6、list
list<int> l;
#include<algorithm>
list<int>::iterator it;
it = find(l.begin(),l.end(),5);
l.sort();//链表的排序
7、bitset
#include<bitset>
bitset<10> b;
b[1]=1;
b[6]=1;
b[9]=1;
b.set();//置位-->1111111111
b.reset();//置0
8、stack
stack的几个常用方法
s.push(33);
s.top();
s.pop();
s.size();
s.empty();//0或1
9、queue
queue的几个常用方法
q.push(33);
q.pop();
q.front;
q.back();
q.empty();
q.size();
10、priority_queue
priority_queue//大的先出队
重载<来改变出队顺序
struct Info
{
string name;
double score;
bool operator < (const Info &a) const
{
return a.score < score;
}
}
priority_queue其它操作和stack一样
……其它的就不一一列出了,有兴趣可以自己google吧!^_^
分享到:
相关推荐
ACM STL的应用是指在国际大学生程序设计竞赛(ACM/ICPC)中广泛使用的C++标准模板库(Standard Template Library, STL)的应用。STL是C++语言中一种非常重要和强大的工具,它提供了一系列数据结构和算法的实现,包括...
标题与描述均提到了“ACM_STL”,这显然是指向了C++标准模板库(Standard Template Library,简称STL)在ACM(Association for Computing Machinery)竞赛中的应用。STL是C++的一个重要组成部分,它提供了许多高效的...
在ACM(国际大学生程序设计竞赛)中,STL的熟练运用是解决问题的关键之一。ACM比赛强调快速解决问题,而STL提供的数据结构和算法可以快速实现复杂的数据操作,因此STL在ACM领域的应用非常重要。 1. 容器: STL提供...
在ACM(国际大学生程序设计竞赛)中,熟悉并灵活运用STL能够极大地提升解决问题的效率。本文将深入探讨STL的关键组件,并阐述如何在ACM竞赛中有效利用它们。 一、容器 STL的核心部分是四大容器:数组(array)、...
在 ACM 竞赛中,熟练掌握和运用 STL 对快速编写实现代码会有极大的帮助。通过 STL,我们可以构造出优雅而且高效的代码,甚至比你自己手工实现的代码效果还要好。 常用的 STL 模板 常用的 STL 模板包括 vector、...
### ACM中的STL #### 一、概述 标准模板库(Standard ...熟练运用STL中的算法、容器和迭代器,可以帮助选手在比赛中取得更好的成绩。希望每位初学者都能重视STL的学习与实践,为未来的编程之路打下坚实的基础。
C++ STL速成是编程领域中的一本小册子,内容涵盖了C++ STL(Standard Template Library)的基础知识和高级应用。该书籍通过对STL的详细介绍,帮助ACM选手快速上手STL。 STL概述 STL是一个通用的数据结构和算法库...
STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,尤其对于ACM(国际大学生程序设计竞赛)选手来说,深入理解并熟练运用STL至关重要。STL提供了一系列高效的容器(如vector、...
### C++泛型编程在ACM中的应用 - **C++STL概述**:STL(Standard Template Library)是C++标准库的一部分,提供了一系列模板类和函数,用于处理数据结构和算法。它主要包括容器、迭代器、算法、函数对象和分配器等...
根据给定文件的信息,我们可以总结出以下关于STL在ACM比赛中常用的基本函数与操作的知识点: ### 一、String 类型详解 #### A. 创建 `string` 类型变量 - **直接创建**:`string s;` 直接创建一个空的 `string` ...
STL模板文档以.doc格式提供,可能是关于如何有效利用STL组件来解决ACM竞赛中的问题的指南,包括容器的使用技巧、算法的高效应用,以及如何通过STL提高代码的可读性和效率。 吉林大学的ACM模板以.pdf格式呈现,PDF是...
在ACM/ICPC(国际大学生程序设计竞赛)中,STL的应用尤其重要。竞赛强调算法设计和问题解决能力,而非具体的技术应用。在这种环境下,使用STL可以快速构建高效解决方案。 1. 输入和输出处理:ACM/ICPC竞赛通常采用...
C++ STL 库函数总结是指 C++ 标准模板库(Standard Template Library)的函数总结,主要用于 ACM 竞赛方面的应用。本总结涵盖了 STL 库的集合(set)部分,包括其定义、成员函数、迭代器、元素操作等方面的知识点。 ...
ACM JAVA 入门是 Java 语言在 ACM 领域的应用入门教程,本文将详细介绍 Java 语言在 ACM 中的基础知识和应用。 标题解析 ACM JAVA 入门主要是为了帮助读者快速学会使用 Java 语言在 ACM 领域中解决问题,而不是学习...
综上所述,ACM/ICPC竞赛中STL的运用不仅能够帮助参赛者快速构建高效的数据结构,还能在算法设计方面提供强有力的工具支持,大大提升了参赛者解决问题的能力和速度。掌握STL的相关知识和技巧对于参加此类竞赛至关重要...
### ACM比赛常用算法(STL相关):Deque详解 ...通过上述内容,我们可以看到Deque作为一种高效的数据结构,在ACM竞赛中有着广泛的应用。掌握Deque的基本操作对于解决涉及列表、队列等类型的问题具有重要意义。
STL,全称为Standard Template Library,是C++编程语言中不可或缺的一部分,特别是在ACM(国际大学生程序设计竞赛)中,理解和掌握STL是至关重要的。STL为程序员提供了一套强大的工具,它包括了各种数据结构(容器)...
在编程领域,STL(Standard Template Library,标准模板库)、Boost库和ACM(Association for Computing Machinery,美国计算机学会)竞赛题目是程序员提升技能的重要资源。同时,掌握如何计算程序运行时间也是优化...
栈在ACM编程中广泛应用,如在解决递归问题时,可以使用栈实现非递归算法,如上面展示的二叉树前序遍历的非递归实现。通过创建一个存储节点指针的栈,我们可以模拟递归调用的过程,逐层访问二叉树的节点。在遍历过程...