正文

STL与泛型2006-09-28 20:06:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/rickone/18913.html

分享到:

我真的不是一个好的C++爱好者,可能我还不算真正懂C++,我常想什么是C++,以前看到有人这样写程序:

#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
 cout<<"Hello!World!"<<endl;
 return 0;
}

然后就觉得好酷,我不用像C那样printf(),于是有段时间就以为C++就是cout,cin,后来又学了写class,于是就认为C++就是在一个程序里写几个自己的class,输入输出用iostream,呵,C++!

再后来学了一点MFC,了解到Microsoft的人是怎么写基础类库的,被那种完整的类体系迷倒,老实说,MFC对SDK的封装简直太彻底了!更重要的是,从MFC的设计者角度,终于明白了一点点,什么是OOD,什么是OOA,如何设计类,如何有效的封装。于是站在MFC肩上,做Windows程序开发,就是从MFC中选择适当的类,继承并设计自己的子类,再外加上VC++提供了Class Wizard,太方便了。于是就以为那就是C++。

感觉从C,C++,每一次大的变革,都是从思想上的变革,软件史上的革命要么是数学上的革命,比如人工智能的突破性进展等,要么就是思想上的革命,思想的飞跃造就了一个IT时代。同样的问题,思考的角度不同,那它本身就不同了。

泛型程序设计,这个词对我还很新,如果说过程化程序设计面向的是过程是函数,如果说C++面向的是对象,那泛型面向的会是什么呢?泛型,我感觉就是更广义的抽象,泛化,数组,链表等泛化成容器,指针泛化成迭代器,函数泛化成算法,突然一下整个C++完全变了样,原来那些东西都不见,感觉像一门新的语言!像这样:

// stl.cpp : Defines the entry point for the console application.
//
#include "StdAfx.h"
#include <iostream>
#include <algorithm>
#include <functional>
#include <string>
#include <vector>

using namespace std;

int main(int argc, char* argv[])
{
 vector<string> vect;
 vect.push_back("Rickone.");
 vect.push_back("C++");
 vect.push_back("STL Programming.");
 vect.push_back("Generic Processing.");
 sort(vect.begin(),vect.end(),greater<string>());
 vector<string>::iterator sp=find(vect.begin(),vect.end(),"Rickone");
 copy(vect.begin(),vect.end(),ostream_iterator<string>(cout,"\n"));

 return 0;
}

Holy Great!

他即不像SQL那样彻底的面向问题(我觉得在人工智能还没真正成熟,一种通用的面向问题的程序设计语言是不可能存在的),也不像C,当然她现在是C++标准的一部分,很大一部分,但我觉得随着她的发展,她将最终脱离C++,发展成独立的成熟的泛型程序设计语言,会在很大程度上解放程序员!软件工程的思想是,在设计的层面上引出一个中间层,通过它可以更有效的工作、生产,也就是抽象,泛型正是如此。

STL最核心的东西应该是容器和迭代器,容器这个概念我原来脑子里思考过(没这个词),因为很多问题在程序运行的时候才知道需要多大的空间,运用堆内存,当然没有容器当然就用动态分配,可是问题是更有甚者在程序运行时都还不确定需要多大的空间,只有在程序运行结束时才能确定,举个例子,我前面编的那个牛顿插值的程序,实际上就存在这个隐患,因为在现实中,我可能不确定我会插多少个点,如果估计10个,在插满之后,这个‘空间’就不能扩大了。现在有了容器的概念,就简单了,容器是可以放下任意多(有限个)‘东西’或者说对象,同时也可以放容器,然后在各种容器之上定义一些通用的算法,在容器与外界之间定义迭代器(相当于超级指针),在程序设计的时候,尽可能的使用算法而不自己写算法,一是简单(偷懒),二是效率要高,实现STL的人可都是牛人啊,全世界的牛人大组合,你能超得过他们?呵呵。

嗯,感觉花些时间学STL还是很值的。

参考:
http://www.stlchina.org
<<Effective STL>>

阅读(7381) | 评论(9)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册