练习八 函数模板

文章描述了一个C++程序,使用模板函数处理不同类型的数组(int,float,char),打印数组元素并按条件重新排列。程序首先读取数组类型、长度和阈值,然后调用两个模板函数,一个用于打印数组,另一个将大于阈值的元素移到数组前面并打印。
摘要由CSDN通过智能技术生成

题目描述

编制如下两个函数模板,用于完成所指定的功能;并编制主函数对它们进行调用:

template <class T> Print(T *p, int n) {...}
template <class T> void GtLever(T *p, int n, T lever){...}

其中,函数模板Print将数组p的前n个元素显示在屏幕上;函数模板Gtlever将p数组前n个元素中大于lever的各个元素, 依次移动到该数组的最前部,而后通过调用Print将p中大于lever的各元素显示在屏幕上。对于char型变量,按对应的ascii码比较大小。

输入

输入一共有两行,第一行为输入数组类型 (只需考虑int, float, char),数组长度,n的取值; 第二行为数组每一位的取值,lever的取值。

输出

输出有一行,数组前n个元素中大于lever的项(保持原有的顺序)

样例输入

char 5 5
a b c d e b

样例输出

c d e
#include <iostream>
using namespace std;

//函数模板就是用来指代一些待定的参数类型
template<class T>
void Print(T *p, int n)    //打印数组p前n个元素
{
    for (int i = 0; i < n; ++i)
        cout << p[i] << " ";
}

template<class T>
void GtLever(T *p, int n, T lever)    //将p数组中大于lever的元素移动到前面,然后打印出来
{
    int j = 0;    //记录大于lever的元素的个数
    for (int i = 0; i < n; ++i) {
        if (p[i] > lever) {
            swap(p[i], p[j]);//从前向后按顺序移动
            ++j;
        }
    }
    Print(p, j);
}

int main() {
    string type;
    cin >> type;
    int amount, n;
    cin >> amount >> n;
    if (type == "int") {   //将数组d_arr的元素初始化为0
        int *d_arr = new int[amount]();
        int lever;
        for (int i = 0; i < amount; ++i) {
            cin >> d_arr[i];
        }
        cin >> lever;
        GtLever(d_arr, n, lever);
        delete[] d_arr;
    } else if (type == "float") {
        float *d_arr = new float[amount]();
        float lever;
        for (int i = 0; i < amount; ++i) {
            cin >> d_arr[i];
        }
        cin >> lever;
        GtLever(d_arr, n, lever);
        delete[] d_arr;
    } else if (type == "char") {
        char *d_arr = new char[amount]();
        char lever;
        for (int i = 0; i < amount; ++i) {
            cin >> d_arr[i];
        }
        cin >> lever;
        GtLever(d_arr, n, lever);
        delete[] d_arr;
    }
    return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纳皮尔的骨头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值