泛型编程的简介

泛型编程的代表作品STL是一种高效、泛型、可交互操作的软件组件。STL以迭代器 (Iterators)和容器(Containers)为基础,是一种泛型算法(Generic Algorithms)库,容器的存在使这些算法有东西可以操作。STL包含各种泛型算法(algorithms)、泛型迭代器(iterators)、泛型容器(containers)以及函数对象(function objects)...
泛型编程的简介
泛型编程的代表作品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())的类对象的算法。

2016-05-18
mengvlog 阅读 10 次 更新于 2025-06-20 00:23:47 我来答关注问题0
  •  猪八戒网 详解TypeScript中的泛型

    泛型简介泛型程序设计是一种编程风格或编程范式,它允许在程序中定义形式类型参数,然后在泛型实例化时使用实际类型参数来替换形式类型参数,这一过程有些类似于函数形参在被函数调用时传入的实参替换。通过泛型可以定义通用的数据结构,增加TypeScript代码中类型的通用性,泛型的结构如下://括号...

  •  翡希信息咨询 泛型编程语言的泛型特性

    泛型编程提高了代码的灵活性和可扩展性。通过使用泛型,可以编写与类型无关的代码,从而更容易地适应不同的数据类型和场景。这有助于减少代码重复,提高代码的可维护性和可重用性。综上所述,泛型编程语言的泛型特性通过提供类型参数占位符、提高运行效率、允许类型参数约束以及增强灵活性和可扩展性,为开发...

  • C语言尝试使用void*指针实现泛型,但存在数据结构适配问题。C++的STL通过类和模板实现泛型编程,提供算法和数据结构的泛型,大大增强代码复用性。空间换时间策略在C++中得以实现,通过泛型减少重复代码,提升执行效率。Java泛型通过类型参数化实现类、接口和方法的泛型化,增强代码可读性和类型安全性。类型擦除...

  • 泛型编程的代表作品STL是一种高效、泛型、可交互操作的软件组件。STL以迭代器 (Iterators)和容器(Containers)为基础,是一种泛型算法(Generic Algorithms)库,容器的存在使这些算法有东西可以操作。STL包含各种泛型算法(algorithms)、泛型迭代器(iterators)、泛型容器(containers)以及函数对象(function objects)。

  • 泛型编程的代表作品STL是一种高效、泛型、可交互操作的软件组件。所谓泛型(Genericity),是指具有在多种数据类型上皆可操作的含意,与模板有些相似。STL巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。S...

檬味博客在线解答立即免费咨询

编程相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部