什么是泛型编程

什么是泛型编程1.C++两种抽象方法(1)面向对象编程封装(Encapsulation)继承(Inheritance)多态(Polymorphism)(2)泛型编程概念(concepts)模型化(modeling)强化(refinement)2.泛型编程概念泛型编程(GenericProgramming)指在多种数据类型上皆可操作。和面向对象编程不同,它并不要求额外的间接…

大家好,又见面了,我是你们的朋友全栈君。

1.C++两种抽象方法

(1)面向对象编程

封装(Encapsulation)
继承(Inheritance)
多态(Polymorphism)
(2)泛型编程

概念(concepts)
模型化(modeling)
强化(refinement)
2.泛型编程概念

    泛型编程(Generic Programming) 指在多种数据类型上皆可操作。和面向对象编程不同,它并不要求额外的间接层来调用函数,而是使用完全一般化并可重复使用的算算效率与针对某特定数据类型而设计的算法相同。

(1)概念(concepts)

    类型必须满足的一组条件。基本的concepts中有赋值、默认构造、相等比较、小于判断等。

(2)模型化(modeling)

    当类型满足这个条件,即为该concepts的一个model。

    如果能够复制类型X的值,或者赋给X对象一个新值的话,则类型X是Assignable的一个model。

(3)强化(refinement)

   如果concept  C2满足concept  C1的所有条件,再加上其他额外条件,则C2是C1的强化(refinement)。

     

3.泛型编程实现

(1)模板

函数模板
类模板
(2)STL

    STL(Standard Template Library,标准模板库) 是泛型编程思想的实现,于1994年被纳入C++标准程序库。STL是一种高效、泛型、可交互操作的软件组件,巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。

    STL以迭代器(Iterators)和容器(Containers)为基础,是一种泛型算法(Generic Algorithms)库,容器的存在使这些算法有东西可以操作。STL包含泛型算法(algorithms)、泛型指针(iterators)、泛型容器(containers)、函数对象(function objects)。

    迭代器(Iterators)是STL的核心,它们是泛型指针,是一种指向其他对象(objects)的对象,迭代器能够遍历由对象所形成的区间(range)。

   迭代器一般分为五种:

Input Iterator     只读,单向移动,如STL中的istream_iterator。
Output Iterator   只写,单向移动,如STL中的ostream_iterator。
Forward Iterator   具有读、写性,单向移动。
Bidirections Iterator   具有读、写性,双向移动。
​​​​​​​Random Access Iterator   具有读、写性,随机访问
       

 

4.泛型编程优缺点

(1)通用性强

            泛型算法是建立在语法一致性上,运用到的类型集是无限的/非绑定的。

(2)效率高

            编译期能确定静态类型信息,其效率与针对某特定数据类型而设计的算法相同。

(3)类型检查严

            静态类型信息被完整的保存在了编译期,编译期发觉更多潜在的错误。

(4)二进制复用性差

           泛型算法是建立在语法一致性上,语法是代码层面的,语法上的约定无法体现在二进制层面。泛型算法实现的库,其源代码基本上是必须公开的。而传统的C库全是以二进制形式发布的。
——————— 
作者:万里归来少年心 
来源:CSDN 
原文:https://blog.csdn.net/liyazhen2011/article/details/82349890 
版权声明:本文为博主原创文章,转载请附上博文链接!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148146.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • webservice发送短信本地部署可以但是服务器部署发送短信息中文乱码

    webservice发送短信本地部署可以但是服务器部署发送短信息中文乱码

    2020年11月9日
  • plsql dev 12 版下载地址「建议收藏」

    plsql dev 12 版下载地址「建议收藏」plsql各个版本下载地址https://www.allroundautomations.com/bodyplsqldevreg.html下载步骤:12版https://jingyan.baidu.com/article/7e4409537ffac92fc1e2ef6c.htmlPLSQLDeveloper12注册码(永久有效)PLSQLDe…

    2022年4月25日
  • Java中&&和&以及||和|的区别「建议收藏」

    Java中&&和&以及||和|的区别「建议收藏」在java的逻辑运算符中,有这么四类:&&(短路与),&(与),|(或),||(短路或)。&&和&都是表示与,区别是&&只要满足第一个条件,后面条件就不再判断。而&要对所有的条件都进行判断。看下面的程序:“&”操作:publicclassOperateDemo01{/**验证"与"…

    2022年7月8日
  • 聊聊系统平均负载_什么是负载敏感系统

    聊聊系统平均负载_什么是负载敏感系统一、什么是平均负载单位时间内,系统处于可运行状态和不可中断状态的进程数,可简单理解为系统平均活跃进程数可运行状态:top命令状态为R,包括Runnable和Running不可中断状态:top命令状态为D,正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如等待硬件设备的I/O响应,这往往是对数据一致性的一种保护机制二、如何查看平均负载$uptime…,loada…

    2022年9月13日
  • pycharm整理代码格式_pycharm代码格式

    pycharm整理代码格式_pycharm代码格式black简介自动的代码格式化工具,兼容pep8,项目地址为:官方给出的简介:BlackistheuncompromisingPythoncodeformatter.Byusingit,youagreetocedecontroloverminutiaeofhand-formatting.Inreturn,Blackgivesyouspeed,determinism,andfreedomfrompycodestylenaggingabo

    2022年8月25日
  • RPM 包默认安装路径

    RPM 包默认安装路径/etc/配置文件安装目录/usr/bin/可执行的命令安装目录/usr/lib/程序所使用的函数库保存位置/usr/share/doc/基本的软件使用手册保存位置/usr/share/man/帮助文件保存位置…

    2022年5月13日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号