第10单元-网易-【OJ - 创建Array类模板】

#include <iostream>
#include <vector>
#include <limits>
using namespace std;

template<typename T>
class Array{
public:
    Array(vector<T> v);
    ~Array();         //析构函数,释放已经申请到的内存
    void sort();        // 排序,将数组中所有元素由小到大排序
    int seek(T key);    // 查找指定的元素key,返回其所在位置(位置编号从0开始),如果没有找到,则返回 -1
    void display();
private:
    T *data_;//存放数组中所有元素的内存的首地址
    int size_;//数组中元素的数量
};

//选择排序算法
template<typename T>
void Array<T>::sort()
{
    for (int i = size_-1; i >=1; --i)
    {
        T max = data_[0];
        int maxindex = 0;
        for (int j = 1; j <= i; j++)
        {
            if (data_[j] > max)
            {
                max = data_[j];
                maxindex = j;
            }
        }
        if (maxindex != i)
        {
            data_[maxindex] = data_[i];
            data_[i] = max;
        }
    }
}

//查找元素
template<typename T>
int Array<T>::seek(T key)
{
    int k = -1;
    for (int i = 0; i <= size_; i++)
    {
        if (data_[i]==key)
        {
            k = i;
            break;
        }
    }
    return k;
}

//析构对象
template<typename T>
Array<T>::~Array()
{
    delete []data_;
}

//构造函数-类型转换
template<typename T>
Array<T>::Array(vector<T> v)
{
    size_ = v.size();
    data_ = static_cast<T*> (new T[size_]);
    for (int i = 0; i < size_; i++)
    {
        data_[i] = v[i];
    }
}

//输出数组
template<typename T>
void Array<T>::display()
{
    int i;
    for (i = 0; i < size_; i++)
    {
        cout << data_[i];
        if (i != size_ - 1)
            cout << " ";  // 输出一个空格
    }
}

int main()
{
    vector<int> vi;
    int ti;
    vector<double> vd;
    double td;
    vector<char> vc;
    char tc;

    while (cin.get() != ‘\n‘)
    {
        cin.unget();
        cin >> ti;
        vi.push_back(ti);
    }

    while (cin.get() != ‘\n‘)
    {
        cin.unget();
        cin >> td;
        vd.push_back(td);
    }

    while (cin >> tc)
    {
        vc.push_back(tc);
    }

    //类型转换
    Array<int> ai(vi);
    Array<double> ad(vd);
    Array<char> ac(vc);

    cout << ai.seek(10) << endl;
    cout << ad.seek(10.0) << endl;
    cout << ac.seek(‘a‘) << endl;

    ai.sort();
    ad.sort();
    ac.sort();

    ai.display();
    cout << endl;
    ad.display();
    cout << endl;
    ac.display();

    // GCC及VC编译器在调试模式下会暂停,便于查看运行结果
#if ( defined(__DEBUG__) || defined(_DEBUG) )
    cin.ignore(numeric_limits<streamsize>::max(), ‘\n‘);
    cin.get();
#endif
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-20 13:58:36

第10单元-网易-【OJ - 创建Array类模板】的相关文章

网易云课堂_C++程序设计入门(下)_第10单元:月映千江未减明 – 模板_第10单元 - 单元作业:OJ编程 - 创建数组类模板

第10单元 - 单元作业:OJ编程 - 创建数组类模板 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩. 本单元作业练习创建模板类.单元作业会涉及冒泡排序.线性查找等算法.如果对排序.查找不熟悉,可以自行baidu或者google 依照学术诚信条款,我保证此作业是本人独立完成的. 1 编写一个数组类模板 Array,能够存储不同类型的数组元素.对数组元素进行查找.

17周 oj 比较大小 类模板

/*声明一个类模板,利用它分别实现两个整数. 浮点数和字符的比较,求出大数和小数. 说明:在类模板外定义各成员函数. 输入两个整数.两个浮点数和两个字符 从大到小输出两个整数.两个浮点数和两个字符 */ #include <iostream> #include <iomanip> using namespace std; template<class numtype> class Compare { public: Compare(numtype a,numtype b

Eclipse 创建 Java 类---Eclipse教程第10课

打开新建 Java 类向导 你可以使用新建 Java 类向导来创建 Java 类,可以通过以下途径打开 Java 类向导: 点击 "File" 菜单并选择 New > Class 在 Package Explorer 窗口中右击鼠标并选择 New > Class 点击类的下拉按钮 () 并选择 ( ) 在打开创建 Java 类向导前,最好选择好Java类所属的包名,这样在创建 Java 类时包名字段就会自动填充. 使用新建 Java 类向导 Java 类向导的弹窗中你可以进

Java集合---Array类源码解析

Java集合---Array类源码解析              ---转自:牛奶.不加糖 一.Arrays.sort()数组排序 Java Arrays中提供了对所有类型的排序.其中主要分为Primitive(8种基本类型)和Object两大类. 基本类型:采用调优的快速排序: 对象类型:采用改进的归并排序. 1.对于基本类型源码分析如下(以int[]为例): Java对Primitive(int,float等原型数据)数组采用快速排序,对Object对象数组采用归并排序.对这一区别,sun在

C# Array类 【温故而知新】

简单的数组知识代码及注释讲解 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace Array类 { class Program { static void Main(string[] args) { //Array是一个抽象类,不能使用构造函数来创建数组 //创建数组 Array arr = Array.CreateInst

【C/C++学院】0825-类模板/final_override/类模板与普通类的派生类模板虚函数抽象模板类/类模板友元/位运算算法以及类声明/Rtti 实时类型检测/高级new创建/类以及函数包装器

类模板 类模板多个类型默认类型简单数组模板 #pragma once template <class T=int>//类模板可以有一个默认的值 class myArray { public: myArray(); ~myArray(); }; #include "myArray.h" template <class T=int>//每一个函数都需要加上一个默认的值 myArray<T>::myArray() //类模板成员函数在外部,需要加载类型初始

C#编程(三十三)----------Array类

Array类 创建数组 Array intArray1 = Array.CreateInstance(typeof(int), 5); for (int i = 0; i < 5; i++) { intArray1.SetValue(33, i); } for (int i = 0; i < 5; i++) { Console.WriteLine(intArray1.GetValue(i)); } Console.ReadKey(); 分析:array类是一个抽象类,所以不能使用构造函数来创建

C#中Array类的使用

Array类 提供创建.操作.搜索和排序数组的方法,因而在公共语言运行时中用作所有数组的基类. 命名控件: System 程序集:mscorlib 语法:public abstract class Array:ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuraEquatable 我们可以看出,Array是一个抽象类. 在博客http://blog.csdn.net/wangshubo1989

Unity3D脚本教程3:数组(Array类)

Array类(数组)     数组允许你将多个对象存储在一个变量中.Array类只能用于JavaScript .更多关于C#或JavaScript中ArrayLists ,字典或哈希表的信息参考MSDN .     这是一个基本的例子,说明可以使用一个数组类做什么    function Start( ) { var arr = new Array ( ) ; arr.Push ("Hello"); //添加一个元素 Print(arr[ 0]);  //打印第一个元素 arr len