阅读此文需要一些c++基础。
如果你不了解STL,那你就把如下内容当做简单介绍,如果你对其有一点了解,那你看过它之后可能会有不一样的认识,如果你很熟悉,那你就不要看了。
STL是标准c++中的一部分,全称为Standard Template Library,它其实并不是c++语法的一部分,只是标准库提供了一些常用数据结构和算法。程序员在使用这些东西时就不需要重新编写,而只要直接使用就可以了。
STL由很多实现,比如HP STL, SGI STL等等,但标准c++的STL跟这些都不太一样,学习是需要注意。
STL并不仅仅是使用这么简单,如果你只会使用它,那么只能说你是了解它。如果了解其他一些语言的标准库,你可能会发现,STL中的东西并不多。所以,有时候,我们就要根据我们的需要来写一些容器,迭代器等等,对STL进行扩展,这些东西只要符合STL中的一些要求,我们自己写的类同样可以使用STL中的函数。
上边提到STL中的实现的东西并不多,我是这样认为的,c++在很大程度上是兼容c语言的(但不一样的地方也越来越多),实现这样一个库,效率是很重要的。但在STL中,很多东西是相互制约的,这也就意味着,实现的东西越多,它的效率就越低。权衡利弊,标准库中就没有加入很多东西,也正是因为这样,STL的效率还是很不错的,在大多数情况下下,使用STL都是一个好的选择(比如实现一个简单的vector,可能99%的人的实现都没有STL的效率高,与其浪费时间,还不如直接使用)。
说了这么多,来看一个很简单的例子,输入许多字符串,排序后输出。
#include <iostream> #include <vector> #include <iterator> #include <algorithm> int main(int argc, char *argv[]) { std::vector<std::string> vs; std::copy(std::istream_iterator<std::string>(std::cin), std::istream_iterator<std::string>(), std::insert_iterator<std::vector<std::string> >(vs, vs.begin())); std::sort(vs.begin(), vs.end()); std::copy(vs.begin(), vs.end(), std::ostream_iterator<std::string>(std::cout, " ")); return 0; }
还是比较简略的吧,只不过看起来有点繁琐,如果你学会使用后,看起来就会很条理的。
简单讲一下这段代码,把标准输入中的字符串用插入迭代器插入到vector容器中,使用std::sort进行排序,再把容器中的内容复制到标准输出,每个元素间以”
”分隔。
差不多就这样了,好像带有很多个人色彩,写的也没有条理,总感觉少了点什么(如果有,请评论一下,谢谢),以后还要多写写,就这样吧。