泛型编程

C++模板

女生的网名这么多〃 提交于 2020-01-14 01:22:20
模板 C++ 模板 模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。前面提到过,多态体现了泛型编程的思想,其语法基础是虚函数和虚继承,那么模板同样是泛型编程必不可少的工具。 函数模板 通过函数重载的方式,可以简单实现同名函数针对不同参数及数据类型进行处理并且不产生冲突,缺点是编写的代码量偏大,函数模板可以很好地解决这个问题。 template < typename T > //模板的形式,T为类型名 //template<class T> void function ( T a ) { cout << a << endl ; } 基于模板编写的函数可以接受不同类型的参数,如果处理过程对参数类型没有明确要求与限制的情况下,可以大大减少编程工作量。另外模板也可以有多个参数,template< typename T,typename Y >。需要注意,定义了模板变量之后,函数中必须同时包含全部的模板参数类型。如下: template < typename T , typename Y > void fun ( T t , Y y ) //可用 void fun ( T t , Y y , int c1 ) //可用 void fun ( T t ) //不可用 void fun ( T t , int c1 ) //不可用 另外,template作为函数模板时

《C++ Primer Plus》16.4 泛型编程 学习笔记

▼魔方 西西 提交于 2020-01-09 21:10:35
STL是一种泛型编程(generic programming)。面向对象编程关注的是编成的数据方面,而泛型编程关注的是算法。它们之间的共同点是抽象和创建可重用代码,单他们的理念决然不同。 泛型编程旨在编写独立于数据类型的代码。 16.4.1 为何使用迭代器 理解迭代器是理解STL的关键所在。模板使得算法独立于存储的数据类型,而迭代其使算法独立于使用的容器类型。因此,它们都是STL通用方法的重要组成部分。 为了解为何需要迭代器,我们来看如何为两种不同数据表现实现find函数,然后来看如何推广这种方法。首先来看一个在double数组中搜索特定值的函数,可以这样编写该函数: double * find_ar(double * ar, int n, const double & val) { for (int i = 0; i < n; i ++) if (ar[i] == val) return &ar[i]; return 0; // or, in C++11, return nullptr; } 如果函数在数组中找到这样的值,则返回该值在数组中的地址,否则返回一个空指针。该函数使用下标来便利数组。可以用模板将这种算法推广到包含==运算符的、任意类型的数组。尽管这样,这种算法仍然与一种特定的数据结构(数组)关联在一起。 下面来看搜索另一种数据结构——链表的情况

C++ Primer

删除回忆录丶 提交于 2019-12-02 11:29:56
C++简介 C++融合了三种不同的编程方式: C语言为代表的过程性语言,C++在C的基础上添加的面向对象编程,以及C++模板支持的泛型编程。 这三个功能使得C++变得强大。 一般来说,计算机语言要处理两个概念::数据结构和算法。 而C语言是过程性语言,更强到的是算法方面。 虽然C语言利用结构化编程的思想很好的解决了大规模程序的组织的问题, 但它在写大型程序时仍然面临着挑战。为应付这种挑战,OOP提供了一种新的方法,与强调算法的过程性编程不同的是,OPP强调的是数据。 OOP不像过程性语言那样,试图使问题满足语言的过程性方法,而是试图让语言来满足问题的需求。其理念是设计与问题的本质特征相对应的数据格式。 最后C++的模板提供了泛型编程,可以之编写一个泛型(即不是特定类型的)函数,并将其用于各种类型。 C++起源,源自C但又超越C,可以看做是C的一个超集,这意味着任何有效的C程序都是有效的C++程序。你可以把C++名称看做是C加上自增符++,即名称C++表明它是C的扩充版本。起初的C++先在C的基础上实现了OOP理念,你可以忽略C++的面向对象特性,但将错过很多有用的东西。在C++获得一定成功之后,C++之父才添加了模板,这使得进行泛型编程成为可能,他和OOP同样重要。 来源: https://www.cnblogs.com/wjundong/p/11743104.html

泛型编程

五迷三道 提交于 2019-12-02 01:55:28
泛型编程:写的代码可以处理任何的类型。(例如,当你要新建立一个数组时,但还不确定该数组的类型 可能后面要用的是整型数组,也可能要用的是字符串型数组,甚至栈类型数组。但因为Object类是所有类的 基类,所以此时只要将该数组定义成Object类型,这样其他的每个类型的数组都可以使用该Object类型的数 组, 这就是泛型编程。)   在早期Java 5版本出现之前,人们要实现泛型编程,都是将类型定义成Object类型来实现的。 1 package L14; 2 import java.util.Arrays; 3 4 public class ObjectTest { 5 private Object[] array; //定义一个Object类数组 6 private int size; //存储数据元素个数 7 8 public ObjectTest(int size){ 9 this.array= new Object[size]; //给数组初始化 //一般新new的都是对象,而T只是个类型参数 10 this.size=0; 11 } 12 public ObjectTest(){ 13 this(10); 14 } 15 public void add(Object data){ //将添加的元素定义成Object类型 16 if(this.size==this

C++之模板与泛型编程

家住魔仙堡 提交于 2019-11-30 11:54:09
一、模板与泛型编程的不同之处:   OOP能处理类型在程序之前都未知的情况;而在 泛型编程中,在编译时就能获知类型 了。 C++语言联邦包括四大部分: C、Object-Oriented C++、Template C++、STL ;由此可见泛型编程是非常重要的一部分,应当重点对待;当我们编写一个泛型程序时,是独立于任何特定类型来编写的。模板是泛型编程的基础,一个模板就是一个创建类或函数的公式。 二、定义模板: 1 template <typename T> 2 int compare(const T& v1, const T& v2) { 3 if(v1 < v2) return -1; 4 if(v2 < v1) return 1; 5 return 0; 6 } 模板定义以关键字 template 开始,后跟一个 模板参数列表(template parameter list) ,它是一个 逗号分隔 的一个或多个模板参数(parameter list)的列表,用<和>包围起来。 模板参数列表不能为空。 模板参数表示在类或函数定义中用到的类型或值。当使用模板时,我们(隐式或显示) 指定模板实参 (template argument), 将其绑定到模板参数上 。 来源: https://www.cnblogs.com/ccpang/p/11582423.html

STL--标准模板库--简要概述

回眸只為那壹抹淺笑 提交于 2019-11-28 22:12:53
STL--标准模板库 #include <vector> //头文件 STL(Standared Template Library) 即标准模板库,惠普实验室开发的一系列软件的统称。他是由Alexader Stepanov、Meng Leng Lee和David R Musser在惠普实验室工作时所开发出来的。 STL主要是一些”容器“ 的集合,这些”容器“ 有list、vector、set、map等等,STL也是算法和其他一些组件的集合,是世界上顶级C++程序员多年的杰作,是泛型编程的一个经典范例 STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL是C++的一部分,内建在C++ 编译器中,因此不用额外安装什么 STL可分为六部分: 容器(containers) 迭代器(iterators) 空间配置器(allocator) 配接器(adapters) 算法(algorithms) 仿函数(functors) STL简介 容器 特殊的数据结构,实现了数组、链表、队列、等等,实质是模板类。 每一种容器都有其优缺点,为满足程序的各种需求,STL准备了多种容器类型。 迭代器 一种复杂的指针,可以通过其读写容器中的对象,实质是模板类。 用于在 遍历 对象群集的元素,对象群集可能是容器,有可能是容器的一部分。 主要用途是为容器提供一组很小的公共接口,利用这个接口

STL--标准模板库--简要概述

孤街浪徒 提交于 2019-11-28 22:12:26
STL–标准模板库 #include <vector> //头文件 STL(Standared Template Library) 即标准模板库,惠普实验室开发的一系列软件的统称。他是由Alexader Stepanov、Meng Leng Lee和David R Musser在惠普实验室工作时所开发出来的。 STL主要是一些”容器“ 的集合,这些”容器“ 有list、vector、set、map等等,STL也是算法和其他一些组件的集合,是世界上顶级C++程序员多年的杰作,是泛型编程的一个经典范例 STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL是C++的一部分,内建在C++ 编译器中,因此不用额外安装什么 STL可分为六部分: 容器(containers) 迭代器(iterators) 空间配置器(allocator) 配接器(adapters) 算法(algorithms) 仿函数(functors) STL简介 容器 特殊的数据结构,实现了数组、链表、队列、等等,实质是模板类。 每一种容器都有其优缺点,为满足程序的各种需求,STL准备了多种容器类型。 迭代器 一种复杂的指针,可以通过其读写容器中的对象,实质是模板类。 用于在 遍历 对象群集的元素,对象群集可能是容器,有可能是容器的一部分。 主要用途是为容器提供一组很小的公共接口,利用这个接口

STL--标准模板库

感情迁移 提交于 2019-11-28 22:11:00
STL--标准模板库 STL(Standared Template Library) 即标准模板库,惠普实验室开发的一系列软件的统称。他是由Alexader Stepanov、Meng Leng Lee和David R Musser在惠普实验室工作时所开发出来的。 STL主要是一些”容器“ 的集合,这些”容器“ 有list、vector、set、map等等,STL也是算法和其他一些组件的集合,是世界上顶级C++程序员多年的杰作,是泛型编程的一个经典范例 STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL是C++的一部分,内建在C++ 编译器中,因此不用额外安装什么 STL可分为六部分: 容器(containers) 迭代器(iterators) 空间配置器(allocator) 配接器(adapters) 算法(algorithms) 仿函数(functors) STL简介 容器 特殊的数据结构,实现了数组、链表、队列、等等,实质是模板类 迭代器 一种复杂的指针,可以通过其读写容器中的对象,实质是模板类 算法 读写容器对象的逻辑算法:排序、遍历、查找、等等,实质是模板函数 空间配置器 容器的空间配置管理模板类 配接器 用来修饰容器、仿函数、迭代器接口 组件间的关系 容器 通过 配置器 取得数据储存空间, 算法 通过 迭代器 存取 容器 内容, 仿函数 可以协助