当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 走近 STL

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 走近 STL


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 64 ::
收藏到网摘: n/a

走近 STL

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

下载源代码

  本文面向的读者:学习过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

  • 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 <iostream>double 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 <iostream>int 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 <iostream>int 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之前,我们需要花点时间来了解