C++ STL概述

接下来我又开一个新的板块用来整理C++中的STL在算法中的应用实践。

因为一直在学刘汝佳老师的《算法竞赛入门》,其实我大一只学习了c语言和java语言,c++并没有学,但是学习了这本算法竞赛的书,我发现现在的比赛很少人写纯c语言的代码,基本都用c++来写,原因在我看来就是因为c++中有一个标准模板库——STL,这东西非常好用,这是别人写好的库,然后直接可以拿来用,所以我自学了C++和其中的STL,发现C++和C的区别还是不大的,很容易移植,而且如果养成一直写C++的习惯,那么将会觉得非常好写。虽然好用,但是它也是非常复杂的。

接下来我将对STL进行一个概述。——参考资料《C++ STL标准程序库开发指南》,有兴趣系统学习STL的同学可以去看一看,主要因为图书馆找了半天没发现什么关于STL的书,就拿了这本看一看。


STL的分类:

STL从广义上来讲分为三类:1.algorithm2.container3.iterator(分别即算法、容器和迭代器),几乎所有的代码都采用了模板类和模板函数的方式。
在C++中,STL被组织为13个头文件:
< algorithm > 、< deque > 、< functional >
< iterator > 、< vector > 、< list >
< map > 、< memory > 、< numeric >
< queue >< set >< stack > 、< utility >
(加粗部分是我经常用到的几个头文件,相信其他人也经常用到)


STL的组件:

最主要的是container、iterator、algorithm(看来和分类差不多啊)
-container即容器,顾名思义,管理某类对象的集合
-iterator即迭代器,用来在一个对象群集的元素上进行遍历动作。这个对象群集可以是整个容器,也可能是容器中的一部分。主要用途是为容器提供一组接口,通过这个接口使某项操作可以进行到群集内的下一个元素。
-algorithm即算法,这是STL提供给处理容器中元素的方法,比如排序、搜索、修改、复制等等基本的算法。

容器主要包括:

vector , list , queue , stack , deque , priority_queue , set , multiset , map , multimap
实话说,这些容器都非常有用,但是要具体问题要分析用哪个容器最适合。反正我觉得很多时候,容器真的使用起来非常方便,有效。

举一个简单的例子吧。
我想很多学生大一学程序设计的时候肯定会遇到这样一个算法:
输入一些数据,将这些数据进行去重并升序排列,比如2 3 4 3 1 5
最后结果是1 2 3 4 5,那么当时做这个的时候,用的是数组,需要自己实现排序,还需要自己实现去重,将数组进行元素移动等等,但是如果当时知道了STL肯定会投机了,直接使用set,为什么?set就是有去重和排序的功能啊!哈哈哈!那这个题目半分钟不就解决啦。可见STL的容器对于解决一些题目就是快、准、狠

常见的算法主要有:

for_each() , find() , find_if() , count() , count_if() , replace() , replace_if() , copy() , sort()等等

常见的迭代器类别:

输入、输出、前向、双向和随机访问

基本的概述就讲到这里吧!

你可能感兴趣的:(STL,stl)