题目说明:

 编写一个程序,使用类模板对数组元素进行排序,倒置、查找和求和
具有对数组元素进行排序,倒置、查找和求和功能,
然后产生类型实参分别为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. [置顶] Android 关于SP读取与存储正确打开方式?

    一.存储方式分类:SharedPreferences存储 二.SharedPreferences存储 1.特点 ①存储单一数据,例如数值,字符串,布尔 ②文件:/date/date/包名/shared ...

  2. 人生苦短之我用Python篇(列表list、字典dict、元组tuple、字符串str)

    列表 创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_s ...

  3. MySQL 存储过程,游标,临时表创建

    -- -------------------------------------------------------------------------------- -- Routine DDL - ...

  4. 类中的__slots__方法与__dict__方法相排斥

    类的 __slots__ 列表 作用: 限定一个类创建的实例只能有固定的属性(实例变量) 不允许对象添加列表以外的属性(实例变量) 防止用户因错写属性的名称而发生程序错误 说明: 1. __slots ...

  5. XPath element 格式

    一.xpath表达式的基本格式 xpath通过“路径表达式”(Path Expression)来选择节点. # 斜杠(/)作为路径内部的分割符. # 同一个节点有绝对路径和相对路径两种写法. # 绝对 ...

  6. JSON简介[转]

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Lan ...

  7. Linux shell字符串截取与拼接

    一 Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.linuxidc.com/123.htm 1  # 号截取,删除左边字符,保留右边字符. echo ${va ...

  8. crt,excrt学习总结

    \(crt,Chinese\ Remainder\ Theorem\) 概述 前置技能:同余基础性质,\(exgcd\). \(crt\),中国剩余定理.用于解决模数互质的线性同余方程组.大概长这样: ...

  9. 携程框架Apollo实现.NET Core微服务统一配置(测试环境-单机)

    Apollo实现.NET Core微服务统一配置(测试环境-单机) https://www.cnblogs.com/guolianyu/p/10065999.html 一.前言 注:此篇只是为测试环境 ...

  10. GitHub项目为己所用

    1.下载 2.cmd  进入文件夹 3.mvn clean package 4.mvn install