泛型编程的简介

泛型编程的代表作品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 阅读 35 次 更新于 2025-08-08 14:59:16 我来答关注问题0
  •  文暄生活科普 什么是泛型编程?

    泛型编程是一种编程范式,它允许开发者编写可以在多种数据类型上工作的代码。在C++中,泛型编程主要通过函数模板和类模板实现。在过去的C语言编程中,针对不同类型的参数,需要编写不同的函数。然而,C++的模板引入后,可以创建函数模板,这些模板能够接受多种类型参数,而无需为每种类型单独编写函数。这意...

  •  翡希信息咨询 Java编程-泛型

    泛型类:具有一个或多个类型变量的类,可看作普通类的工厂。类型参数:用< >中的字母表示形式泛型类型,也称为形式泛型类型。在Java API中,常用E表示集合的元素类型,K和V分别表示表的关键字与值的类型,T、U、S表示“任意类型”。实际具体类型:指使用泛型时替换类型参数的具体类型。类型参数限定:...

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

  •  翡希信息咨询 泛型方法?

    总的来说,泛型方法是现代编程中的一种重要技术,它提高了代码的灵活性、可重用性和安全性。通过泛型方法,开发者可以编写出更加健壮和高效的代码。

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

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

编程相关话题

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