`
lingyibin
  • 浏览: 190925 次
  • 性别: 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的应用

    对于学习STL 的ACMer必备 C/C++爱好者也是必备!

    STL是一种非常好用的工具,在C++acm中运用非常广泛

    搞acm的,搞蓝桥杯的可以看看STL内容丰富

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

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

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

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

    ACM资料合集

    ACM的资源合集,你不需要到处去找了! (lecture_01)初识ACM...STL_in_ACM 吉大ACM模板 浙江大学ACM模板(经典代码) 算法竞赛入门经典(第2版) -刘汝佳 挑战程序设计竞赛(第2版)完整扫描版 浙师大acm教材 等.....

    如何学习ACM,看后受益匪浅

    下面来谈谈在竞赛中应用的数学的主要分支。 1、离散数学——作为计算机学科的基础,离散数学是竞赛中涉及最多的数学分支,其重中之重又在于图论和组合数学,尤其是图论。 图论之所以运用最多是因为它的变化最多...

    ACM算法模版大集合

    STL中的数据结构 vector deque set / map 动态规划 / 记忆化搜索 动态规划和记忆化搜索在思考方式上的区别 最长子序列系列问题 最长不下降子序列 最长公共子序列 一类NP问题的动态规划解法 树型动态...

    浙江大学ACM模板 计算几何,图论,数据结构,经典题的模板

    ACM Fighting! 2 1.计算几何 5 1.1 注意 5 1.2几何公式 6 1.3 多边形 8 1.4多边形切割 11 1.5 浮点函数 12 1.6 面积 18 1.7球面 18 1.8三角形 19 1.9三维几何 22 1.10 凸包 30 1.11 网格 32 1.12 圆 33 1.13 矢量...

    常用算法代码

    | STL 中的 PRIORITY_QUEUE 24 | 堆栈 24 | 区间最大频率 24 | 取第 K 个元素 25 | 归并排序求逆序数 25 | 逆序数推排列数 25 | 二分查找 25 | 二分查找(大于等于 V 的第一个值) 25 | 所有数位相加 25 ...

    队列,库函数

    队列,库函数的应用,stl,用于acm,精简代码,使用方便

    ACM竞赛技巧总结

    除vector和string以外的STL都不支持*(it+1)的访问形式11.位运算的妙用12.运用fill函数给任意容器赋任意值(1)给二维数组赋值(2)其他容器 1.更快(最快)的读入优化 struct ios { inline char gc(){ static ...

    C++的pb_ds库在OI中的应用集合

    C++的pb_ds库在OI中的应用 C++的pb_ds库在OI中的应用 C++的pb_ds库在OI中的应用 C++的pb_ds库在OI中的应用 C++的pb_ds库在OI中的应用

    XUPT第二周PPT 222.pptx

    运用贪心策略在每一次转化时都取得了最优解。问题的最优子结构性质是该问题可用贪心算法或动态规划算法求解的关键特征。贪心算法的每一次操作都对结果产生直接影响,而动态规划则不是。贪心算法对每个子问题的解决...

Global site tag (gtag.js) - Google Analytics