zoukankan      html  css  js  c++  java
  • STL简介

    阅读此文需要一些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进行排序,再把容器中的内容复制到标准输出,每个元素间以” ”分隔。

    差不多就这样了,好像带有很多个人色彩,写的也没有条理,总感觉少了点什么(如果有,请评论一下,谢谢),以后还要多写写,就这样吧。


  • 相关阅读:
    每日一水 POJ8道水题
    编译和使用 MySQL C++ Connector
    j2ee model1模型完成分页逻辑的实现 详解!
    DB查询分析器访问EXCEL时,要在表名前后加上中括弧或双引号
    指向结构体变量的指针
    EOSS V3.0 企业运营支撑系统(基于RBAC原理的权限管理)
    MybatisGen1.0 Mybatis JavaBean Mapper生成工具
    The table name must be enclosed in double quotation marks or sqare bracket while accessing EXCEL by
    资源-Android:Android
    软件-开发软件:Android Studio
  • 原文地址:https://www.cnblogs.com/riskyer/p/3239020.html
Copyright © 2011-2022 走看看