【C++之函数模板】数据排序

简介: 【C++之函数模板】数据排序

题目要求


对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型,用函数模板。


——谭浩强的《C++面向对象程序设计》第1章习题第14小题


函数模板


重载函数可以实现一个函数名多用,但在程序中仍要分别定义每一个函数,较为繁琐,而函数模板可以解决这个问题。


函数模板就是建立一个通用函数,不具体指定函数类型和形参类型,只用一个虚拟类型来代表。

凡是函数体相同的函数都可以用这个模板来代替,不用重复定义多个函数,只需要用模板定义一次。

通用函数模板的定义格式:


template <typename T>


或者


template <class T>


函数模板虽然比函数重载方便,但也有局限性。函数模板只适用于函数的参数个数相同而类型不同,且函数体相同的情况。


程序


/*
************************************************************************
@file:    main.cpp
@date:   20201024
@brief:   对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型,用函数模板实现
@blog:    https://blog.csdn.net/weixin_43470383/article/details/109268212
************************************************************************
*/
#include <iostream>
using namespace std;
#define n 3
template  <typename T>
void sort(T a[])
{
  int i, j, k;
  T min;
  for (i = 0; i < n - 1; i++)
  {
  k = i;
  for (j = i + 1; j < n; j++)
  {
    if (a[j] < a[k])
    k = j;
  }
  if (k != i)
  {
    min = a[k];
    a[k] = a[i];
    a[i] = min;
  }
  }
}
int  main()
{
  // 1.整型、单精度型、双精度型数组定义
  int num1[n];
  float num2[n];
  double num3[n];
  // 2.输入数组元素
  for (int i = 0; i < n; i++)
  {
  cin >> num1[i];
  }
  for (int i = 0; i < n; i++)
  {
  cin >> num2[i];
  }
  for (int i = 0; i < n; i++)
  {
  cin >> num3[i];
  }
  // 3.调用排序函数,用选择法对数据进行排序
  sort(num1);
  sort(num2);
  sort(num3);
  // 4.输出数组元素
  for (int i = 0; i < n; i++)
  {
  cout << num1[i] << " ";
  }
  cout << endl;
  for (int i = 0; i < n; i++)
  {
  cout << num2[i] << " ";
  }
  cout << endl;
  for (int i = 0; i < n; i++)
  {
  cout << num3[i] << " ";
  }
  cout << endl;
  system("PAUSE");
  return   0;
}


运行结果


输入:

3 2 1

12.3 23.1 32.1

46.54 65.46 34.56


输出:

1 2 3

12.3 23.1 32.1

34.56 46.54 65.46


程序实现了数据从小到大排序。

相关文章
|
1月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
91 10
|
21天前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
24天前
|
编译器 程序员 C++
【C++打怪之路Lv7】-- 模板初阶
【C++打怪之路Lv7】-- 模板初阶
13 1
|
1月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
44 6
|
1月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
21 0
C++ 多线程之线程管理函数
|
1月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
23 3
|
1月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
135 1
|
1月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
26 1
|
1月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
38 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
1月前
|
算法 编译器 C++
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
75 2