走近 STL

2016-01-29 12:29 9 1 收藏

走近 STL,走近 STL

【 tulaoshi.com - C语言心得技巧 】

走近 STL

作者:陶汉军
中国石油大学 计算机02-2

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com)

下载源代码

  本文面向的读者:学习过C++程序设计语言(也就是说学习过Template),但是还没有接触过STL的STL的初学者。这实际上是我学习STL的一篇笔记,老鸟就不用看了。

什么是泛型程序设计
  我们可以简单的理解为:使用模板的程序设计就是泛型程序设计。就像我们我们可以简单的理解面向对象程序设计就是使用虚函数的程序设计一样。

STL是什么
  作为一个C++程序设计者,STL是一种不可忽视的技术。Sandard Template Library (STL):
标准模板库,更准确的说是 C++ 程序设计语言标准模板库。学习过MFC的人知道,MFC是微软公司创建的 C++ 类库。而与之类似的是 STL 是模板库,只不过 STL 是 ANSI/ISO 标准的一部分,而 MFC 只不过是微软的一个产品而已。也就是说STL是所有C++编译器和所有操作系统平台都支持的一种库,说它是一种库是因为,虽然STL是一种标准,也就是说对所有的编译器来说,提供给C++程序设计者的接口都是一样的。也就是说同一段STL代码在不同编译器和操作系统平台上运行的结果都是相同的,但是底层实现可以是不同的。 令人兴奋的是,STL的使用者并不需要了解它的底层实现。 试想一下,如果我们有一把能打开所有锁的钥匙,那将是多么令人疯狂啊。嘎嘎。这个歪梦我做了20多年鸟。
  STL的目的是标准化组件,这样你就不用重新开发它们了。你可以仅仅使用这些现成的组件。STL现在是C++的一部分,因此不用额外安装什么。它被内建在你的编译器之内。

为什么我们需要学习STL

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com)STL是 C++的ANSI/ISO 标准的一部分,可以用于所有C++语言编译器和所有平台(Windows/Unix/Linux..)。STL的同一版本在任意硬件配置下都是可用的;STL 提供了大量的可复用软件组织。例如,程序员再也不用自己设计排序,搜索算法了,这些都已经是STL的一部分了。嘎嘎,有意思吧;使用STL 的应用程序保证了得到的实现在处理速度和内存利用方面都是高效的,因为STL设计者们已经为我们考虑好了;使用STL编写的代码更容易修改和阅读,这是当然的鸟。因为代码更短了,很多基础工作代码已经被组件化了;使用简单,虽然内部实现很复杂;

  虽然,STL的优点甚多,但是STL的语法实在令初学者人头疼,许多人望而却步。可是STL是每个C++程序设计者迟早都要啃的一块骨头。因为越来越多的C++代码是用STL编写的,看不懂麻烦就大鸟。越来越多的人在用STL,不懂就无法和别人一起合作了。好事多磨嘛,早点学习早点解脱。

下面让我们来看几段代码吧:(你觉得头疼就不要看了)

//stl_cpp_1.cpp#include <iostreamdouble mean(double *array, size_t n){    double m=0;    for(size_t i=0; i<n; ++i){        m += array[i];    }    return m/n;}int main(void){    double a[] = {1, 2, 3, 4, 5};    std::cout<<mean(a, 5)<<std::endl;    // will print 3    return 0;}
好懂吧,除了那个std有点让人不舒服以外?这是一段普通的没有使用STL的C++代码。再看下面一段:
//stl_cpp_2.cpp#include <vector#include <iostreamint main(void){    std::vector<double a;    std::vector<double::const_iterator i;    a.push_back(1);    a.push_back(2);    a.push_back(3);    a.push_back(4);    a.push_back(5);    for(i=a.begin(); i!=a.end(); ++i){        std::cout<<(*i)<<std::endl;    }    return 0;}
  如果你真的没有接触过STL的话,你会问,呀,vector 是啥呀?我会告诉你,那是一排美女。嘎嘎。这可不是个比喻,表想歪鸟。这是一段纯种的STL代码,看到尖括号了吧,知道那是模板了吧。看到a.push_back(5),a.begin(),a.end()你不感觉奇怪么?可是我们并没有定义这些函数啊。
//stl_cpp_3.cpp#include <vector#include <iostreamint main(void){    std::vector<int q;    q.push_back(10);    q.push_back(11);     q.push_back(12);    std::vector<int v;    for(int i=0; i<5; ++i){        v.push_back(i);    }    std::vector<int::iterator it = v.begin() + 1;    it = v.insert(it, 33);    v.insert(it, q.begin(), q.end());    it = v.begin() + 3;    v.insert(it, 3, -1);    it = v.begin() + 4;    v.erase(it);    it = v.begin() + 1;    v.erase(it, it + 4);    v.clear();    return 0;}
  这一段你又看到了新东西了吧,iterator???不罗嗦了,等你看完这篇文章,回头再看就简单了。在正式介绍STL之前,我们需要花点时间来了解

来源:https://www.tulaoshi.com/n/20160129/1486306.html

延伸阅读
标签: 摄影
和模特出外约拍,作品却都僵硬死板如木头?拍出来没有情绪,没有感觉? 也许只是你与你的模特还不够接近 本文将展示一位摄影师的拍摄心得,与你分享走近被摄者内心的要领~。 再走近一点就好 Robert Capa 说过如果你的照片没有拍得很棒,那代表你还可以走得更近去拍摄(If your photographs aren’t good enough, you’re not clo...
标签: 服装搭配
1.比利时设计师的设计。上衣浓浓的民族风格花卉和半身裙的黑白风景画完美的映衬,穿出来很有气质。   2.彩色印花的百褶裙很有复古的意味,黑色的上衣看上去很舒适。搭在一起很和谐,主次很分明。   3.要出席活动,肯定少不了礼服裙。一袭明亮的黄色礼服裙,走在人群中非常耀...
前言 永远记住,编写代码的宗旨在于简单明了,不要使用语言中的冷僻特性,耍小聪明,重要的是编写你理解的代码,理解你编写的代码,这样你可能会做的更好。    --- Herb Sutter !-- frame contents -- !-- /frame contents -- 1998年,国际C++标准正式通过,标准化对C++最重要的...
标签: 分娩 孕前
生双胞胎的女性老得快 从优生优育和提高人口素质的角度来考虑,世界性的多胞胎出生率上升并不是一件值得庆贺的事。因为多胞胎既不利于优生优育,也不利于婴儿以后的成长发育。多胞胎对孕妇来说负担过重,有限“资源”难以合理分配,这些问题会直接影响到孕妇的安全。 多胞胎婴儿多数早产,发育先天不足 人类的子宫腔是有限的,胎盘的容积...
标签: 服装搭配
1.硬朗的肩部线条,干练意味十足。中间镂空的设计满满的都是诱惑,也让身材曲线变得更为诱人。大师的作品总是那么不同凡响。   2.暗金色闪光材质尽显成熟女人的魅力。左边的裙摆经过特殊处理,丰富了整体造型,更充满了成熟女性的诱惑力。   3.热情的而红色总...

经验教程

227

收藏

65
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部