题目说明:

 编写一个程序,使用类模板对数组元素进行排序,倒置、查找和求和
具有对数组元素进行排序,倒置、查找和求和功能,
然后产生类型实参分别为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. Redis的高可用技术方案

    引言: redis是广为使用的缓存解决方案,本文将给出基于Sequential的高可用方案,自动进行主从的切换,在master节点down机之后,透明的进行切换. 主从节点的设置方案 设置主节点red ...

  2. 主机屋MySQL数据库链接

    点击高级设置,进入Myadmin,导入数据 要注意,数据库名字不能变,这是人家给的. 在php链接时,: $db=[ // 服务器地址 'hostname' => 'localhost', // ...

  3. 实战maven私有仓库三部曲之二:上传到私有仓库

    在上一章<实战maven私有仓库三部曲之一:搭建和使用>我们搭建了maven私有仓库,并体验了私有仓库缓存jar包的能力,避免了局域网内开发人员去远程中央仓库下载的痛苦等待,本章我们再来体 ...

  4. Windows2012启动自动帐户登陆

    Win+R 启动 输入regedit  运行注册表 找到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogo ...

  5. 在crontab中执行shell脚本的问题

    crontab中记录的编写比较简单,下面是一个示例: * * * /app/tpssapp/ftpsrc/tools/statTables/statTables.sh > /app/tpssap ...

  6. ubuntu安装依赖:0.8.1-1ubuntu4.4 正要被安装以及vm nested解决方法

    刚才在ubuntu10.04虚拟机上安装kvm,提示0.8.1-1ubuntu4.4 正要被安装,查了一下,有一种解决方法: 进入“系统->系统管理->更新管理器->设置”,在弹出的 ...

  7. BJOI 模拟赛 #3 题解

    T1 一个网格,每个点有权值,求有多少条路径权值乘积不小于 $n$ $R,C \leq 300, n \leq 10^6$ sol: 暴力 dp 是 $O(R \times C \times n)$ ...

  8. redhat7学习笔记之从零到部署javaweb项目

    REDHAT7学习笔记 1. 安装vmware10 安装过程略,下载地址:链接: https://pan.baidu.com/s/16odKKkRYBxGWDVo1cz_wxA 注意,10以上版本不在 ...

  9. Filter学习(二)Filter使用Decorator设计模式

    在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目 ...

  10. BZOJ1563 NOI2009 诗人小G【决策单调性优化DP】

    LINK 因为是图片题就懒得挂了 简要题意:有n个串,拼接两个串需要加一个空格,给你l和p,问你拼接后每个串的总长减l的绝对值的p次方的最小值 首先打表发现一下这题是决策单调的对于所有数据都成立就当他 ...