前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c++那些事儿5.0 模板

c++那些事儿5.0 模板

作者头像
热心的社会主义接班人
发布2018-04-27 13:16:02
4820
发布2018-04-27 13:16:02
举报
文章被收录于专栏:cscs

模板

代码语言:javascript
复制
 是泛型编程的重点,在后面的STL中,模板的功能得到广泛运用。
 在java中泛型,集合都有模板的身影,弄清模板可以让我们更加深入学习。

可讲的东西不多,直接看code
代码语言:javascript
复制
#include<iostream>
#include<string>
using namespace std;
//选择排序的模板函数
template<typename T>
void sort(T *arr,int n) {
    T min;
    for (int i = 0; i < n-1; i++) {
        min = arr[i];
        for (int j = i + 1; j < n; j++) {
            if (min > arr[j])
            {
                min = arr[j];
                arr[j] = arr[i];
                arr[i] = min;
            }
      }
    }
}
//打印数组的模板函数。
template<class N>
void print(N *arry, int n) {
    for (int i = 0; i < n; i++)
        cout << arry[i] << " ";
 }
int main() {

    int arr[6] = { 2,89,55,33,22,88 };
    cout << "原数组:";
    print(arr, 6);
    cout << endl;
    sort(arr, 6);
    cout << "选择排序后的数组:";
    print(arr, 6);
    cout << endl;

    system("pause");
    return 0;
}

结果如下:

001.PNG

模板类
代码语言:javascript
复制
    模板声明前要加上  template<typename 类型参数> 
              //typename也可以用class替换,但是我不建议,任意混淆

代码如下
代码语言:javascript
复制
//  定义模板堆栈
#include<iostream>
#include<string>
using namespace std;

/*
定义堆栈类模板
*/
template<typename T, int num>
class Stack {
private:
    T arr[num];
    int point;
public:
    Stack();//构造函数
    bool isEmpty(); //判断栈是否为空
    bool isFull(); //判断栈是否为满
    bool add(const T &t); //一个元素压栈
    bool get(T &t); //取堆栈元素
};

template<class T, int num>
Stack<T, num>::Stack() {
    point = 0; //初始化为空。
}

template<typename T, int num>
bool Stack<T, num>::isEmpty()
{
    return point == 0;
}

template<class T, int num>
bool Stack<T, num>::isFull()
{
    return point == num;
}

template<class T, int num>
bool Stack<T, num>::add(const T &obj)
{
    if (isFull())
        return false;
    else {
        arr[point] = obj;
        point++;
        return true;
    }
}
template<class T, int num>
bool Stack<T, num>::get(T &obj)
{
    if (isEmpty())
        return false;
    else
    {
        point--;
        obj = arr[point];
        return true;
    }
}

int main() {
    Stack<double, 5> stack;
    cout << "堆栈是否为空:" << stack.isEmpty() << endl;
    stack.add(3.1); //压栈
    cout << "堆栈是否为空:" << stack.isEmpty() << endl;
    stack.add(3.14);
    stack.add(3.141);
    stack.add(3.1415);
    stack.add(3.14159);
    cout << "堆栈是否已满:" << stack.isEmpty() << endl;
    double d = 0.0;
    while (stack.get(d))
    {
        cout << d <<"  ";
    }
    system("pause");
    return 0;
}
结果:

代码排版还行吧?

代码语言:javascript
复制
争取把c++语法写完,然后写javase,在数据结构与算法。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.09.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模板
    • 可讲的东西不多,直接看code
      • 结果如下:
        • 模板类
          • 代码如下
            • 结果:
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档