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

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


  • 相关阅读:
    springboot2.04+mybatis-plus+swagger2+CodeGenerator
    1.Jenkins 在windows下的安装与配置
    .Net Core Linux centos7行—vscode开发,linux部署运行
    .Net Core Linux centos7行—安装nginx,运行静态网站
    .Net Core Linux centos7行—hyper-v安装linux系统和.net core sdk
    扩展htmlhelper.DropDownListFor 支持list数据源和option增加属性
    SignalR主动通知订阅者示例
    asp.net mvc HandleErrorAttribute 异常错误处理 无效!
    Microsoft.AspNet.Identity 自定义使用现有的表—登录实现
    asp.net mvc输出自定义404等错误页面,非302跳转。
  • 原文地址:https://www.cnblogs.com/riskyer/p/3239020.html
Copyright © 2020-2023  润新知