首页 > 其他分享 >模板

模板

时间:2023-05-24 17:34:49浏览次数:35  
标签:函数 int template my Stack 模板

C++提供了模板(template)编程的概念。所谓模板,实际上是建立一个通用函数或类,其类内部的类型和函数的形参类型不具体指定,用一个虚拟的类型来代表。这种通用的方式称为模板。模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。

一.函数模板

1.定义:

template <typename T1, typename T2...>

函数返回类型  函数名 (参数表){...}

例:

template <typename T>
T my_min(T a, T b)
{
    return (a < b) ? a : b;
}

a. 模板的声明要与函数模板的定义紧挨

2.模板函数

在调用模板时,必须为它的类型参数提供实际的数据类型,编译器将利用该类型替代模板中的全部类型参数,自动生成代码,这个过程称之为模板的实例化。实例化生成的函数就是模板函数

3.模板参数

3.1.实例化过程不会进行隐式的类型转化,可以显式指定类型参数的类型

 my_min<double>(0.1,2) 

3.2.参数可以为非类型参数,并且只能向其传递常数,不能传递变量(见例2)

 二.类模板

与函数模板相似直接上例子

例3:

//Stack类模板
//Stack.h
#ifndef STACK_H_INCLUDED #define STACK_H_INCLUDED using namespace std; template<typename T, int MAXSIZE> class Stack{ private: T elems[MAXSIZE + 1]; int n; // 元素个数 public: Stack(){n = 0;} void push(T e) { if(n == MAXSIZE) { cout << "栈已满,加入失败"<<endl; return; } elems[++n] = e; } void pop() { if(n == 0) { cout << "栈已清空"<<endl; return ; } n--; } T top() { if(n == 0) { cout << "栈已清空" <<endl; return 0; } return elems[n]; } }; #endif // STACK_H_INCLUDED

 

#include <iostream>
#include "Stack.h"
using namespace std;
int main()
{
    Stack<int,10> istack;
    for(int i = 0; i < 10; i ++ )
        istack.push(i);
    cout << istack.top() << endl;
    for(int i = 0; i < 9;i ++ )
        istack.pop();
    cout << istack.top() << endl;
    istack.pop();
}

 

 

 

例1:

//最小值函数的模板
#include <iostream> using namespace std; template <typename T> T my_min(T a, T b) { return (a < b) ? a : b; } template <typename T1, typename T2> T1 my_max(T1 a, T2 b) { return (a < b ) ? a : b; } int main() { cout << my_min(1,2) << endl; cout << my_min('b','a') << endl; cout << my_min(1.0,0.1) << endl; cout << my_min<double>(0.1,2) << endl; cout << my_max(1.3, 1) << endl; return 0; }

 

 

例2:

//排序函数模板
include <iostream> using namespace std; template <typename T, int n> T my_sort(T a[n]) { for(int i = 0; i < n - 1; i ++) { for(int j = 0; j < n - 1 - i; j ++) { if(a[j] > a[j + 1]) { T t = a[j + 1]; a[j + 1] = a[j]; a[j] = t; } } } } int main() { int a[] = {2,3,4,5,10,1,0}; my_sort<int,7>(a); cout <<a[0]<<endl; return 0; }

 

标签:函数,int,template,my,Stack,模板
From: https://www.cnblogs.com/qlc23333/p/17428795.html

相关文章

  • 对应4种作文模板
    2016下半年(问题解决)Inthecontemporaryworld,_(主题词)have/hasbecomeincreasinglyimportant.It'sofgreatnecessityfor___to.Reasonsandconcreteevidencetosupportmyviewpointareasfollows.​ Inthefirstplace,thereisnodoubtthat_____________......
  • Acwing 798.差分矩阵(模板)
    题目#include<iostream>usingnamespacestd;constintN=1010;intn,m,q;inta[N][N],b[N][N];voidinsert(intx1,inty1,intx2,inty2,intc){b[x1][y1]+=c;b[x2+1][y1]-=c;b[x1][y2+1]-=c;b[x2+1][y2+1]+=......
  • pta_【CPP0038】单向链表模板类
    #include<iostream>usingnamespacestd;template<typenameT>classNode{public:Node(Tdata):data(data),next(nullptr){cout<<"NodeConstructorrun"<<endl;}Node(constNode<T>&other)......
  • 泛型编程(GP)和C++标准模板库(STL)
    GenericProgramming(GP)泛型编程,就是使用template(模板)为主要工具来编写程序level0:使用C++标准库level1:认识C++标准库level2:良好使用C++标准库level3:扩充C++标准库C++StandardLibraryC++标准库,编译器带的,可以看到sourcecode至于StandardTemplateLibrary->STL标......
  • 2022 暑 模板归纳
    目录手写栈队列广度优先级搜索并查集哈希一.手写栈栈的函数s.push(x)s.pop()s.top()s.size()s.empty()//手写栈intx,p=0;ints[10000005];voidpush(intx){s[++p]=x;return;}voidpop(){p--;return;}inttop(){......
  • C++ 模板 使用 enum 代替 typename
    enumtestEnum{A,B,C};template<testEnumC>classTestClassTemplate{public:voidprint(){printf("common\n");}};template<>classTestClassTemplate<A>{public:voidprint(){printf(&quo......
  • 母函数详解(定义,模板代码,用法)
    本篇文章前半部分的母函数定义及讲解,和后面的题目推荐,在数学中,某个序列的母函数(Generatingfunction,又称生成函数)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。母函数可分为很多种,包括普通母函数、指数母函数、L级数、贝......
  • 网络流模板
    #include<cstdio>#include<cstring>#include<stack>#include<queue>#include<cassert>#include<list>#include<vector>#definesdstd::#defineUP(i,s,e)for(autoi=s;i<e;++i)constexprintINF=0x3f3f3......
  • pytest + yaml 框架 -29.模板过滤器语法与自定义过滤器使用
    前言v1.2.6版本支持模板过滤器语法的使用,并且可以自定义过滤器了。针对有同学提到上个接口返回一个id值,下个接口引用变量的时候需要根据这个值做一些运算,比如在引用的结果加1.jinja2是可以支持模板过滤器语法的,本篇介绍下模板过滤器的相关使用.v1.2.6版本主要更新以下几点1......
  • final函数模板
    #include<iostream>#include<cmath>usingnamespacestd;classPoint{ private: doublex; doubley; doublez; public: Point(doublea,doubleb,doublec):x(a),y(b),z(c){}; frienddoubleoperator-(Point,Point);};template<classT>double......