`
lingyibin
  • 浏览: 197239 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

STL在ACM中的应用

阅读更多

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 STL的应用是指在国际大学生程序设计竞赛(ACM/ICPC)中广泛使用的C++标准模板库(Standard Template Library, STL)的应用。STL是C++语言中一种非常重要和强大的工具,它提供了一系列数据结构和算法的实现,包括...

    ACM_STL

    标题与描述均提到了“ACM_STL”,这显然是指向了C++标准模板库(Standard Template Library,简称STL)在ACM(Association for Computing Machinery)竞赛中的应用。STL是C++的一个重要组成部分,它提供了许多高效的...

    acm stl

    在ACM(国际大学生程序设计竞赛)中,STL的熟练运用是解决问题的关键之一。ACM比赛强调快速解决问题,而STL提供的数据结构和算法可以快速实现复杂的数据操作,因此STL在ACM领域的应用非常重要。 1. 容器: STL提供...

    STL总结,acm竞赛可以看一下

    在ACM(国际大学生程序设计竞赛)中,熟悉并灵活运用STL能够极大地提升解决问题的效率。本文将深入探讨STL的关键组件,并阐述如何在ACM竞赛中有效利用它们。 一、容器 STL的核心部分是四大容器:数组(array)、...

    ACM STL常用 的模板

    在 ACM 竞赛中,熟练掌握和运用 STL 对快速编写实现代码会有极大的帮助。通过 STL,我们可以构造出优雅而且高效的代码,甚至比你自己手工实现的代码效果还要好。 常用的 STL 模板 常用的 STL 模板包括 vector、...

    acm ————stl

    ### ACM中的STL #### 一、概述 标准模板库(Standard ...熟练运用STL中的算法、容器和迭代器,可以帮助选手在比赛中取得更好的成绩。希望每位初学者都能重视STL的学习与实践,为未来的编程之路打下坚实的基础。

    C++ STL l速成 适合acm

    C++ STL速成是编程领域中的一本小册子,内容涵盖了C++ STL(Standard Template Library)的基础知识和高级应用。该书籍通过对STL的详细介绍,帮助ACM选手快速上手STL。 STL概述 STL是一个通用的数据结构和算法库...

    STL的经典好书,ACM选手必备

    STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,尤其对于ACM(国际大学生程序设计竞赛)选手来说,深入理解并熟练运用STL至关重要。STL提供了一系列高效的容器(如vector、...

    acm程序设计曾宗根(主要看第二章,用STL解题会很方便)

    ### C++泛型编程在ACM中的应用 - **C++STL概述**:STL(Standard Template Library)是C++标准库的一部分,提供了一系列模板类和函数,用于处理数据结构和算法。它主要包括容器、迭代器、算法、函数对象和分配器等...

    ACM比赛STL 基本的函数大全STL.docx

    根据给定文件的信息,我们可以总结出以下关于STL在ACM比赛中常用的基本函数与操作的知识点: ### 一、String 类型详解 #### A. 创建 `string` 类型变量 - **直接创建**:`string s;` 直接创建一个空的 `string` ...

    acm模版(包含浙大,吉林,和STL模版)

    STL模板文档以.doc格式提供,可能是关于如何有效利用STL组件来解决ACM竞赛中的问题的指南,包括容器的使用技巧、算法的高效应用,以及如何通过STL提高代码的可读性和效率。 吉林大学的ACM模板以.pdf格式呈现,PDF是...

    STL标准模板库 ACM

    在ACM/ICPC(国际大学生程序设计竞赛)中,STL的应用尤其重要。竞赛强调算法设计和问题解决能力,而非具体的技术应用。在这种环境下,使用STL可以快速构建高效解决方案。 1. 输入和输出处理:ACM/ICPC竞赛通常采用...

    C++ STL库函数总结(纯手打,主要偏向ACM竞赛方面使用)

    C++ STL 库函数总结是指 C++ 标准模板库(Standard Template Library)的函数总结,主要用于 ACM 竞赛方面的应用。本总结涵盖了 STL 库的集合(set)部分,包括其定义、成员函数、迭代器、元素操作等方面的知识点。 ...

    ACM JAVA 入门

    ACM JAVA 入门是 Java 语言在 ACM 领域的应用入门教程,本文将详细介绍 Java 语言在 ACM 中的基础知识和应用。 标题解析 ACM JAVA 入门主要是为了帮助读者快速学会使用 Java 语言在 ACM 领域中解决问题,而不是学习...

    ACM竞赛与STL

    综上所述,ACM/ICPC竞赛中STL的运用不仅能够帮助参赛者快速构建高效的数据结构,还能在算法设计方面提供强有力的工具支持,大大提升了参赛者解决问题的能力和速度。掌握STL的相关知识和技巧对于参加此类竞赛至关重要...

    acm比赛常用算法(stl相关)

    ### ACM比赛常用算法(STL相关):Deque详解 ...通过上述内容,我们可以看到Deque作为一种高效的数据结构,在ACM竞赛中有着广泛的应用。掌握Deque的基本操作对于解决涉及列表、队列等类型的问题具有重要意义。

    ACM要了解之一STL

    STL,全称为Standard Template Library,是C++编程语言中不可或缺的一部分,特别是在ACM(国际大学生程序设计竞赛)中,理解和掌握STL是至关重要的。STL为程序员提供了一套强大的工具,它包括了各种数据结构(容器)...

    stl帮助文档,boost帮助文档,acm习题,计算程序运行时间工具

    在编程领域,STL(Standard Template Library,标准模板库)、Boost库和ACM(Association for Computing Machinery,美国计算机学会)竞赛题目是程序员提升技能的重要资源。同时,掌握如何计算程序运行时间也是优化...

    ACM 程序设计:STL编程及应用-6.pdf

    栈在ACM编程中广泛应用,如在解决递归问题时,可以使用栈实现非递归算法,如上面展示的二叉树前序遍历的非递归实现。通过创建一个存储节点指针的栈,我们可以模拟递归调用的过程,逐层访问二叉树的节点。在遍历过程...

Global site tag (gtag.js) - Google Analytics