走近 STL

年轻的样子day

年轻的样子day

2016-01-29 12:29

走近 STL,走近 STL

走近 STL

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

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

下载源代码

  本文面向的读者:学习过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://m.tulaoshi.com/cyuyanjiaocheng/)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之前,我们需要花点时间来了解
展开更多 50%)
分享

猜你喜欢

走近 STL

C语言教程 C语言函数
走近 STL

走近Photoshop滤镜

PS PS教程
走近Photoshop滤镜

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

走近牛初乳

母乳 初乳
走近牛初乳

ProModel怎么导入.STL文件

电脑网络
ProModel怎么导入.STL文件

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

走近神秘的高温瑜伽

瑜伽 养生 健康
走近神秘的高温瑜伽

学琴 让孩子走近音乐

分娩
学琴 让孩子走近音乐

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

PSV《闪之轨迹2》五分钟刷满99个U物质方法介绍

PSV《闪之轨迹2》五分钟刷满99个U物质方法介绍

开始使用SQLServer2005,没用过MSDE,一开始还不知道怎么下手呢 呵呵

开始使用SQLServer2005,没用过MSDE,一开始还不知道怎么下手呢 呵呵
下拉加载更多内容 ↓