题目说明:

 编写一个程序,使用类模板对数组元素进行排序,倒置、查找和求和
具有对数组元素进行排序,倒置、查找和求和功能,
然后产生类型实参分别为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. php 路径问题

    今天迁移网站服务器时,路径出错: 解决办法: 在网站首页根目录 设置define 全局变量 ——根目录: 在涉及目录的地方,统统替换为 根目录:

  2. LNMP架构基础搭建

    LNMP架构+wordpress博客 环境: centos6.7 2.6.32-573.el6.x86_64 nginx-1.6.3 mysql-5.5.49 php-5.3.27 wordpress ...

  3. 框架重构:测试中的DateTime.Now

    存在的问题 DateTime.Now是C#语言中获取计算机的当前时间的代码: 但是,在对使用了DateTime.Now的方法进行测试时,由于计算机时间的实时性,期望值一直在变化.如:计算年龄. pub ...

  4. Jmeter简单的操作数据库

    mysql驱动包下载地址: https://dev.mysql.com/downloads/connector/j/ 1.添加驱动配置,把下载下来的驱动配置上去 2.添加‘配置元件-用户定义的变量’, ...

  5. 当我们使用 MVVM 模式时,我们究竟在每一层里做些什么?

    这篇文章不会说 MVVM 是什么,因为讲这个的文章太多了:也不会说 MVVM 的好处,因为这样的文章也是一搜一大把.我只是想说说我们究竟应该如何理解 M-V-VM,当我们真正开始写代码时,应该在里面的 ...

  6. 利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务

    背景 2019第一篇文章. 此文源于前公司在迁移项目到.NET Core的过程中,希望使用Generic Host来管理定时任务程序时,没法部署到Windows服务的问题,而且官方也没给出解决方案,只 ...

  7. 使用OPtional的orElse()问题

    使用OPtional的orElse()问题 项目中有这样一段代码: return Optional.ofNullable(service.A()).orElse(service.B()) 1 功能显而 ...

  8. mysql 查找多个值并且取最大值一个和分组

    SELECT eco_truename, eco_uid, max(checkup_time) AS time FROM es_checkup_order WHERE checkup_time GRO ...

  9. 《DSP using MATLAB》示例Example 8.15

  10. Tornado的入门研究

    1.为啥要了解Tornado 首先,Tornado是大神写出来的,如果学习python的话,参照Tornado的源码是一件非常好的事情,属于FaceBook的开源代码 其次,Tornado就是我们在 ...