题目说明:

 编写一个程序,使用类模板对数组元素进行排序,倒置、查找和求和
具有对数组元素进行排序,倒置、查找和求和功能,
然后产生类型实参分别为int型和double型的两个模板类,
分别对整型数组与双精度数组完成所要求的操作

实现代码:

 /*
编写一个程序,使用类模板对数组元素进行排序,倒置、查找和求和
具有对数组元素进行排序,倒置、查找和求和功能,
然后产生类型实参分别为int型和double型的两个模板类,
分别对整型数组与双精度数组完成所要求的操作
*/ // 以下代码 中标注了是用来debug的 都可以在debug完成后 将用来debug的代码删除 #include<iostream>
using namespace std;
const int SIZE=; // Array -> 模板类(类模板)
template <class Type>
class Array{
private:
int l, z;
Type a[SIZE];
public:
Array(Type *b, int n)
{
int i;
l = n;
cout << "Array构造函数: " << endl; // debug
for(i=;i<l;i++)
{
a[i] = b[i];
// 接下来两个cout 是用来debug
cout << a[i] << " ";
}
cout << endl;
} /*
void paixu();
void daozhi();
void chazhao(Type t);
void add(); // 这个是正确的命名,但是求和还是用sum比较好 add表示加
*/
//以上函数的正确命名方法
void sort();
void reverse();
void find(Type t);
void sum(); }; template <class Type>
void Array<Type>::sort(){
Type c[SIZE];
int i, j, m;
for(i=;i<l;i++)
{
c[i] = a[i];
} // 这下面的{}最好一个都不要省
// 一个都不省的话 首先方便后期添加代码 其次看起来舒服
// 排序 升序排序
for(j=;j<l;j++)
{
for(j=i;j<l;j++)
{
if(c[i]>c[j])
{
m = c[i];
c[i] = c[j];
c[j] = m;
}
}
} // 输出排序后的数据 -> a b c
for(i=;i<l;i++)
{
cout << c[i] << " ";
}
cout << endl; } template <class Type>
void Array<Type>::reverse(){
int i;
Type d[l]; // 声明数组
for(i=;i<l;i++)
{
// int d[i] = a[l-1-i];
d[i] = a[l--i];
cout << d[i] << " ";
}
cout << endl;
} template <class Type>
void Array<Type>::find(Type t){
int e = ;
int flag = ; // 0表示未找到
for(int i=;i<l;i++)
{
if(a[i]==t)
{
flag = ;
cout << "是第" << i+ << "个元素" << endl;
e = i;
break;
// 找到了就应该直接退出
// 要不然如果不退出循环 后面有一样的值 就会又输出一遍
// 当然如果你想将每个值的位置都输出也可以 但是一般常理是找第一个出现的值 // 另外可能没找到 你应该对这种情况做一个判断 如果没找到 输出适当提示信息
// 判断没找到的方法很简单 就是用一个flag变量来标识是否找到
}
} // 判断是否未找到该元素
if(flag==)
{
cout << "未找到该元素" << endl;
} } template <class Type>
void Array<Type>::sum(){
int i;
Type res = ; // res应该初始化
for(i=;i<l;i++)
{
res += a[i];
} cout << "数组和为:" << res <<endl;
} int main()
{
int i, x, y, q;
double p; // 构建初始数组
cout << "请输入两种类型数组元素个数: " << endl;
cin >> x >> y;
int *a;
double *b;
a = new int[x];
b = new double[y];
cout<<"请输入int型数组元素"<<endl;
for(i=;i<x;i++)
{
cin >> a[i];
}
cout << "请输入double型数组元素" << endl;
for(i=;i<y;i++)
{
cin >> b[i];
} // 用初始数组初始化 模板类数组
Array<int> c(a,x);
Array<double> d(b,y); // int型数组功能展示
cout << "int 型数组:" << endl;
cout << "排序:" << endl;
c.sort();
cout << "倒置:" << endl;
c.reverse();
cout << "请输入要查找的元素: ";
cin >> q;
c.find(q);
cout << "求和:" << endl;
c.sum(); // double型数组功能展示
cout << "double 型数组:" << endl;
cout << "排序:" << endl;
d.sort();
cout << "倒置:" << endl;
d.reverse();
cout << "请输入要查找的元素: ";
cin >> p;
c.find(p);
cout << "求和:" << endl;
d.sum(); // 清除数据
delete []a;
delete []b; return ; }

C++模板类练习题的更多相关文章

  1. 单链表的C++实现(采用模板类)

    采用模板类实现的好处是,不用拘泥于特定的数据类型.就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍! 此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作.  链表结构定义 定义单链表 ...

  2. 模板类 error LNK2019: 无法解析的外部符号

    如果将类模板的声明和实现写在两个独立的文件中,在构建时会出现"error LNK2019: 无法解析的外部符号 "的错误. 解决方法有: 第一种方法,就是把类模板中成员函数的声明和 ...

  3. 关于g++编译模板类的问题

    今天搞了我接近4个小时,代码没错,就是调试没有通过,无论怎么也没有想到是编译器的问题 g++不支持c++模板类 声明与实现分离,都要写到.h文件里面. 以后记住了.

  4. C++11特性(模板类 initializer_list)

    [1]initializer_list模板类 C++primer 原文如下: 通读原文相关篇幅,分析解读内容如下: 提供initializer_list类的初衷,为了便于将有限个同一类型(或可转换为同 ...

  5. C++11模板类使用心得

    1.推荐使用std::shared_ptr<TaskT>代替指针TaskT*使用,shared_ptr是一种智能指针,能自主销毁释放内存,在c++11中被引入,在多线程编程中有很大的用处, ...

  6. c++模板类

    c++模板类 理解编译器的编译模板过程 如何组织编写模板程序 前言常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”.看看我们几乎每天都能遇到的模板类吧,如S ...

  7. C++ 模板函数与模板类

    一.模板函数 函数模板提供了一类函数的抽象,即代表了一类函数.当函数模板被实例化后,它会生成具体的模板函数.例如下面便是一个函数模板:

  8. 模板类重载<<运算符

    写了一个Matrix模板类,需要重载<<, 1.需要友元函数 2.需要此函数的实现在.h中(本人试验出来的,放在.cpp中编译不通过) template <typename T> ...

  9. C++模板类的使用

    1.定义模板类 通过类似于下面的语法可以定义一个模板类: template<typename T> class Job : public virtual RefBase { public: ...

随机推荐

  1. .Net快速获取网络文本文件最后一段文字-小应用

    场景 现在公司的测试环境一些文本日志不让接触,提供一个网络http服务器让人直接访问,这文件大时,一般10MB一个文件,不在同一局域网,网速限制200K,要等很久,访问很慢. .Net代码请求文本文件 ...

  2. Leetcode 894. All Possible Full Binary Trees

    递归 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # ...

  3. 显卡、显卡驱动、显存、GPU、CUDA、cuDNN

    显卡 Video card,Graphics card,又叫显示接口卡,是一个硬件概念(相似的还有网卡),执行计算机到显示设备的数模信号转换任务,安装在计算机的主板上,将计算机的数字信号转换成模拟 ...

  4. iOS-----解决Prefix Header出错的问题

    我们在使用 Prefix Header 预编译文件时有时会遇到如下的报错 clang: error: no such file or directory: '/Users/linus/Dropbox/ ...

  5. Java受检异常和不受检异常

    Java异常有checked exception(受检异常)和unchecked exception(不受检异常), 编译器在编译时,对于受检异常必须进行try...catch或throws处理,否则 ...

  6. 在notepad++中插件安装的办法

    在notepad++中插件安装的办法新版的notepad++去掉了一个叫做插件管理工具的插件.这就导致我们不能通过界面去安装notepad++的一些比较方便的插件了.本文通过手动安装插件管理工具和ft ...

  7. js helper(hsv/hsb转rgb颜色,uuid,金额小写转大写)

    hsv/hsb转rgb颜色 //h:[0,360],s:[0,100],v:[0,100] //return r:[0,256], g:[0,256],b:[0,256] function hsvto ...

  8. 《DSP using MATLAB》示例Example 9.5

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  9. c++封装继承多态

    面向对象的三个基本特征 封装.继承.多态.其中,封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类):它们的目的都是为了——代码重用.而多态则是为了实现另一个目的——接口重用 封装 ...

  10. MySQL 8 连接时出现 1251 和 2059 错误

    MySQL 8 连接时出现 1251 和 2059 错误 原因是MySQL 8 改了密码加密算法.1 原来是:mysql_native_password MySQL8 改成了 caching_sha2 ...