`

STL,我对它的思考和学习(纯粹谈思想,不谈语法技术)

阅读更多
首先,学习一个东西一顶要弄清楚它产生的背景,和他的特性在哪儿。先来看STL的特性,编

译期的动态。也就是说,根据类型来推导出代码的语法生成。如果你够聪明,你肯定会联想到

C/C++一些静态编译的东西,比如全局,比如static,比如enum,那么是否可以利用STL特性和这

些东西结合起来,弄出有意思的东西呢?比如让enum的值等于一个模板函数,比如在static函

数里做点判断。那么一些数的取值在编译器内完成,甚至打印出东西,也不足奇怪了。

其次,STL背景是某某人突然思考,对一个四则运算来说,提供的接口不应该根据类型不同而

重新设计,进而有了STL的概念。也就说,在STL提倡的背景里,所带来的思想是:在程序里,

任何东西都是数据+存储空间这么个概念,而存储空间是个抽象的概念,不应为数据的变化而

变化内部的操作。你见过一间房屋可以放下桌子,如果送来的是个箱子,就必须提供个货仓

吗?支持这个之上的,是人类不以计算机语言做为基础思考而衍生出的思维。反过来说,STL

提倡的正是一个OO数据处理的一个概念,而不是OO设计,甚至对OO设计没有任何挂钩(数据处

理和设计也有若干的交纵)。

最后,STL的语法糖衣确实非常的烦琐。为什么用得人少?我以为,在

语意数据的解释上,STL自相矛盾了。熟悉C的人都知道,无论多么抽象的对象和需求的表达,

操纵的都是内存的字节流而已。在接口简便的处理上,大家更宁愿使用typedef int,float,或

者class这样的数据类型做为接口,因为这已经够简洁了,有时候需要的并不是对所有数据的

容纳。对不同数据容纳,比如你用个class A的接口,现在却改个 class B,随之的绑定是内

部处理方法也不一样了。如果能将这些糖衣的语法(typename 之类的)改成像解释语言般的var

来表达,就显得简单易用得多了。毕竟这种语法的推导C++的一个特性,而不是它的一个功能

化。

---昨晚睡觉又想了下,进行补充
范型这个概念的提出肯定是对的。但是C++这种语法的实现,给人许多语法纠结的陷阱,虽然很强大,但是个人认为远不如java的舒服。其次,BJ博士说过,看到一个需求和问题,就应该用Class和STL不由自主的组装起来,也就是说,当有一天能够把逻辑的处理(比如OO的设计)和数据的容器(STL)随心所欲的结合起来的时候,就是小成了。


(一家之言,请莫恶意相加。我的最后一点想的不是很深入,但是我能感觉到范型做为OO数据处理带来的影响)


2009-9-22 0:16:12补记
    C++ template是本好书。但可惜,越高级语言的应用书籍冗余性太多,尤其是外国的经典。作者都是拼命的把读者看成一个傻瓜,这对于一个入门的新手很合适,但是对于有基础,并且有自己一套学习方法的人很反感。
    看完第一二篇后,我自己总结了一套语法规则,和一些重载的优先的。并且特别好奇的看了编译可以直接查找的特性(这个绝对是个副产物)。基本的几点我也总结上,到后面的几篇,我发现无一例外都是在告戒这些东西和注意点。实在是很没意思。。刷刷刷直接翻到最后几章。
    那么我现在的学习方法是,多从一个例子里总结用到的技术方案,多怀疑,多尝试,你从一个例子里得到的越多,你也越省时间,也越锻炼自己。剩下的就是多编码经验,书都是次要的了。什么书应该认真看?纯理论的。。
    我之前也简单说过,你真正掌握和吃透技术,不是知道他的技术点,而是了解他要给予的你思想,然后综合产生你自己的思想信仰。
2
0
分享到:
评论

相关推荐

    不错的STL文档学习资料

    10. **STL中文手册**:一份完整的STL中文参考手册,包含了所有STL组件的详细描述、接口和示例,是查阅和学习STL不可或缺的工具。 通过这些资料的学习,读者可以系统地了解STL的基本概念,掌握其主要组件的使用,...

    STL学习教程word版

    STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它为程序员提供了高效、灵活的数据结构和算法。STL的主要组件包括容器、迭代器、算法和函数对象,这些组件共同构成了强大的...

    stl的学习:c++ STL

    STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它为程序员提供了高效且可重用的数据结构和算法。STL的主要组成部分包括容器、迭代器、算法和函数对象,这些组件共同构成了...

    C++高手之STL学习资料

    STL的学习不仅仅是掌握每个组件的基本用法,更重要的是理解其背后的泛型编程思想和设计模式,这将有助于写出更加高效、可维护的C++代码。对于C++程序员来说,熟练掌握STL是成为高手的重要一步,因为STL的使用能显著...

    STL入门 STL入门 STL入门 STL入门 STL入门 STL入门

    STL的出现是计算机科学抽象能力发展的一个里程碑,它引入了泛型编程的概念,允许程序员编写不依赖于具体数据类型的代码,从而实现更高的复用性和灵活性。 在STL中,有六个关键的组件: 1. **迭代器(Iterator)**:...

    走近STL-STL入门

    STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它引入了一种称为泛型程序设计的概念。...通过不断实践和学习,可以逐渐克服其语法上的挑战,享受到STL带来的便利和强大功能。

    c.STL 学习c语言的必看

    根据提供的文件信息,标题与描述均提到了“c.STL 学习c语言的必看”,这表明文章的主题是关于C++标准模板库(STL)在C语言学习中的重要性,尽管C语言本身并不支持STL,但此处应当理解为C++语言的学习资料。...

    STL学习参考资料合集(PDF)

    STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它提供了高效、可重用的数据结构和算法。STL的学习涵盖了容器、迭代器、算法和函数对象等多个方面,对于深入理解和提升C++...

    C++&STL学习资料

    STL(Standard Template Library,标准模板库)是C++库的一部分,它提供了高效的数据结构和算法,极大地提高了C++程序员的生产力。 “大规模C++程序设计”这一主题通常涵盖如何在大型项目中有效地组织和管理C++代码...

    STL学习资料

    5. 泛型编程:STL的核心思想是泛型编程,它强调代码的复用和抽象。理解模板的工作原理,以及如何使用模板类和函数来编写高效、灵活的代码。 6. 容器间的转换:学习如何在不同容器之间安全地转移数据,以及如何利用...

    stl模板视频学习教程.rar

    STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它提供了高效、灵活的容器、迭代器、算法等组件,极大地提高了程序员的开发效率。本教程将深入讲解STL的核心概念和使用技巧...

    stl 学习资料

    STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它提供了高效、可重用的数据结构和算法。STL的主要组件包括容器(containers)、迭代器(iterators)、算法(algorithms)...

    C++ STL 开发技术导引(随书源码)

    本书共分5篇26章,以“C++编程技术→C++ STL泛化技术基础→C++ STL容器技术→C++ STL算法技术→C++ STL迭代器技术”为线索具体展开,通过大量的源码分析和应用实例,详细介绍了C++ STL的技术原理和使用方法。...

    STL学习经验总结

    STL学习总结,介绍STL函数,容器的用法

    STL扩展技术手册(Extended STL)光盘

    《STL扩展技术手册(Extended STL)光盘》是一份宝贵的学习资源,它不仅包含了STL(Standard Template Library,标准模板库)的源码,还提供了各种实用的工具文件,帮助开发者深入理解和应用这个强大的C++编程工具。...

    C++标准库STL源码

    它是C++标准库的一个重要实现,对STL的发展和推广产生了重大影响。 SGI STL的源码是开源的,其设计和实现体现了诸多优秀的编程思想和技巧。下面是对SGI STL源码的一些关键特点和描述:泛型编程、算法与容器的分离、...

    STL 学习资料STL 学习资料

    STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它提供了高效、可重用的数据结构和算法。STL的主要目标是提高代码的编写效率和可读性,通过使用泛型编程(Generic ...

    vim STL语法高亮

    一个vim插件,使vim支持stl库的语法高亮

    三十分钟掌握STL(学习STL,方便编程)

    STL,全称为Standard Template Library(标准模板库),是C++编程中不可或缺的一部分,它为程序员提供了高效且灵活的数据结构和算法。通过学习STL,我们可以显著提高代码的可读性、可维护性和运行效率。在接下来的...

Global site tag (gtag.js) - Google Analytics