问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

泛型编程的简介

发布网友 发布时间:2023-08-16 14:16

我来回答

1个回答

热心网友 时间:2024-11-19 01:34

泛型编程的代表作品STL是一种高效、泛型、可交互操作的软件组件。STL以迭代器 (Iterators)和容器(Containers)为基础,是一种泛型算法(Generic Algorithms)库,容器的存在使这些算法有东西可以操作。STL包含各种泛型算法(algorithms)、泛型迭代器(iterators)、泛型容器(containers)以及函数对象(function objects)。STL并非只是一些有用组件的集合,它是描述软件组件抽象需求条件的一个正规而有条理的架构。
泛型的第一个好处是编译时的严格类型检查。这是集合框架最重要的特点。此外,泛型消除了绝大多数的类型转换。如果没有泛型,当你使用集合框架时,你不得不进行类型转换。
关于泛型的理解可以总结下面的一句话,它是把数据类型作为一种参数传递进来。
泛型编程(Generic Programming)最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器库。所谓通用的标准容器库,就是要能够做到,比如用一个List类存放所有可能类型的对象,这样的事情;熟悉一些其它面向对象的语言的人应该知道,如Java里面这是通过在List里面存放Object引用来实现的。Java的单根继承在这里起到了关键的作用。然而单根继承对C++这样的处在语言链底层的语言却是不能承受之重。此外使用单根继承来实现通用容器也会带来效率和类型安全方面的问题,两者都与C++的理念不相吻合。 泛型编程最初诞生于C++中,由Alexander Stepanov[2]和David Musser[3]创立。目的是为了实现C++的STL(标准模板库)。其语言支持机制就是模板(Templates)。模板的精神其实很简单:参数化类型。换句话说,把一个原本特定于某个类型的算法或类当中的类型信息抽掉,抽出来做成模板参数T。比如qsort泛化之后就变成了:
template<class RandomAccessIterator, class Compare>
void sort(RandomAccessIterator first, RandomAccessIterator last,
Compare comp);
其中first,last这一对迭代器代表一个前闭后开区间,迭代器和前闭后开区间都是STL的核心概念。迭代器建模的是内建指针的接口(解引用、递增、递减等)、前闭后开区间是一个简单的数学概念,表示从first(含first)到last(不含last)的区间内的所有元素。此外,comp是一个仿函数(functor)。仿函数也是STL的核心概念,仿函数是建模的内建函数的接口,一个仿函数可以是一个内建的函数,也可以是一个重载了operator()的类对象,只要是支持函数调用的语法形式就可成为一个仿函数。
通过操作符重载,C++允许了自定义类型具有跟内建类型同样的使用接口;又通过模板这样的参数化类型机制,C++允许了一个算法或类定义,能够利用这样的接口一致性来对自身进行泛化。例如,一个原本操作内建指针的算法,被泛化为操纵一切迭代器的算法。一个原本使用内建函数指针的算法,被泛化为能够接受一切重载了函数调用操作符(operator())的类对象的算法。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
梦见和同性发生关糸了 梦见和同性朋友发生亲密关系 学生党如何科学护肤? 学生党该怎么基础护肤? 有什么美容护肤的技巧适合学生党? 怎么@全部成员啊? 新洲摩尔城一楼小吃租金多少 武汉王家湾有哪些广场 你好 请问 晚上6点开始 学瑜伽 可以吗? 因为我想在下班时间去 锻炼锻 ... 电脑联网有哪些条件台式电脑无线上网需要具备哪些条件 灯红酒绿、成就男人雄心 ; 水性扬花、显尽女人风情.是什么意思_百度知 ... 红灯酒绿成就成就男人雄心 水性杨花尽显显女人风情什么意思 水性杨花 成语 成语接龙:水性杨花---( )---( ) 马桶没有吸力下不去怎么办 一栋楼里的两个管子一个排气管排污管不分彼此有的是用的一个其他的怎 ... 两个卫生间共用一个排气管,会不会发生别人家的空气到我的房间呢? 有两个卫生间,伸到屋顶排气管可以共用一个吗? 侧方停车和倒车入库难点分析 小汽车变速箱油多少公里换一次 轿车变速箱油多久更换 想买车,首付只有两万。嗯,分期付款也不能超过一千。四年或五年付清都... 奇瑞QQ多少钱?为什么那么多人买它呢?有什么优势? 西宁繁华区在那? 贪吃[tān chī]什么意思?近义词和反义词是什么?英文翻译是什么? 云仓百货是合法直销吗?可以网上运作吗?? 孩子成绩好可以有什么奖励? 全国有几个信访局和司法局合并的 问一道数学题,关于高中概率的,谢谢大家啦~~(*^__^*) 何况会婆娑的翻译是什么 马尔代夫喜好什么宠物 榆林亮馨苑小区为啥那么多人出售 集宁区连鑫苑小区位置在哪 中班鸭子骑车视频观察记录怎么写 2020款探岳组合仪表故障 感情专一的女人多不?还是水性杨花的女人多? 怎么让微信在后台运行时不提示消息? vb常用的数学函数中立方根的函数名是什么 vb开立方根是什么函数 VB中求一个数的平方根的代码 韩国的十八岁为什么叫做十六岁 求专门玩LOL电脑配置,只要主机,显示器,能配一体机最好了。求大神... 小姑子骂我,她以后有事我用帮忙吗? 小姑子骂你是废物怎么办? 厦门夏商百货集团有限公司的企业文化 厦门夏商百货集团三明有限公司列东店怎么样? 厦门夏商百货集团南平有限公司建瓯时代店怎么样? 一部漫画不记得名字了 以前看的一部漫画忘记名字了,有人知道漫画名,作者名都行 男主有三个女主以上(包括三人)的后宫的后宫动漫,越多越好,最好是2010年... 哪一部动漫里有三个男主角四个女主角