什么是泛型编程

什么是泛型编程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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python 构造生产者消费者模型

    python 构造生产者消费者模型

    2021年11月11日
    44
  • Python爬虫系列:爬取小说并写入txt文件

    Python爬虫系列:爬取小说并写入txt文件Python爬虫系列——爬取小说并写入txt文件文章介绍了如何从网站中爬取小说并写入txt文件中,实现了单章节写取,整本写取,多线程多本写取。爬虫使用的python版本为python3,有些系统使用python指令运行本脚本,可能出现错误,此时可以试一试使用python3运行本脚本。本文是一个教程,一步步介绍了如何爬取批量小说内容以及存储这是txt文件中,以下是项目源码地址。

    2022年5月29日
    72
  • 【STM32F407的DSP教程】第2章 Matlab R2018a的安装

    【STM32F407的DSP教程】第2章 Matlab R2018a的安装完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547第2章MatlabR2018a的安装本期教程主要是讲解MatlabR2018a的安装过程,作为学习DSP的必备软件,掌握简单的Matlab操作是必须的。目录第2章MatlabR2018a的安装2.1初学者重要提示2…

    2025年9月24日
    6
  • Hybrid App 和 React Native 开发那点事

    Hybrid App 和 React Native 开发那点事简介:HybridApp(混合模式移动应用)开发是指介于Web-app、Native-App这两者之间的一种开发模式,兼具「NativeApp良好用户交互体验的优势」和「WebApp跨平台开发的优势」。很多人都知道,ReactNative是Facebook开源的框架,可以直接用Javascript开发原生的APP,本文则会围绕开发中的具体实践问题进行讨论。

    2025年6月21日
    1
  • opencv 人脸识别 (二)训练和识别

    opencv 人脸识别 (二)训练和识别上一篇中我们对训练数据做了一些预处理,检测出人脸并保存在\pic\color\x文件夹下(x=1,2,3,…类别号),本文做训练和识别。为了识别,首先将人脸训练数据转为灰度、对齐、归一化,再放入分类器(EigenFaceRecognizer),最后用训练出的model进行predict。—————————————–环境:vs2010+op

    2022年6月1日
    53
  • 在S3C2440烧写程序

    在S3C2440烧写程序你好!这里是风筝的博客,欢迎和我一起交流。以JZ2440开发板为例,烧录程序到S3C2440。可以使用dnw软件进行烧录。在windows下,一般dnw的驱动都装不好,一般需要禁止数字签名才能装好。所以我们可以把dnw装到linux下,在linux下烧录程序。 先用filezilla软件和虚拟机里装好的linux建立连接,把dnw移到linux随便一个目录下,比如我是放到/home/b…

    2022年5月1日
    42

发表回复

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

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