【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


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

相关文章
|
2月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
112 10
|
26天前
|
安全 编译器 C++
【C++11】可变模板参数详解
本文详细介绍了C++11引入的可变模板参数,这是一种允许模板接受任意数量和类型参数的强大工具。文章从基本概念入手,讲解了可变模板参数的语法、参数包的展开方法,以及如何结合递归调用、折叠表达式等技术实现高效编程。通过具体示例,如打印任意数量参数、类型安全的`printf`替代方案等,展示了其在实际开发中的应用。最后,文章讨论了性能优化策略和常见问题,帮助读者更好地理解和使用这一高级C++特性。
42 4
|
26天前
|
算法 编译器 C++
【C++】模板详细讲解(含反向迭代器)
C++模板是泛型编程的核心,允许编写与类型无关的代码,提高代码复用性和灵活性。模板分为函数模板和类模板,支持隐式和显式实例化,以及特化(全特化和偏特化)。C++标准库广泛使用模板,如容器、迭代器、算法和函数对象等,以支持高效、灵活的编程。反向迭代器通过对正向迭代器的封装,实现了逆序遍历的功能。
34 3
|
29天前
|
编译器 C++
【c++】模板详解(1)
本文介绍了C++中的模板概念,包括函数模板和类模板,强调了模板作为泛型编程基础的重要性。函数模板允许创建类型无关的函数,类模板则能根据不同的类型生成不同的类。文章通过具体示例详细解释了模板的定义、实例化及匹配原则,帮助读者理解模板机制,为学习STL打下基础。
31 0
|
2月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
2月前
|
编译器 程序员 C++
【C++打怪之路Lv7】-- 模板初阶
【C++打怪之路Lv7】-- 模板初阶
18 1
|
2月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
79 6
|
2月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
37 0
C++ 多线程之线程管理函数
|
2月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
38 3
|
2月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
337 1