西北农林科技大学2024学年C++面向对象程序设计OJ——T14 安全数组类模板

一.题目描述

Description

设计一个安全数组类模板Array<T>,其中包含数组的输入、输出、排序和查找等方法,使用三种类型的数据对其进行测试。

(1)设计构造函数Array<T>::Array(int n),可动态分配n个T类型的存储空间;

(2)设计析构函数Array<T>::~Array()释放内存;

(3)重载输入流运算符istream &operator>>(istream& in, Array<T>& arr)读入n个T类型数据;

(4)重载输出流运算符ostream &operator<<(ostream& out, const Array<T>& arr)输出n个T类型数据;

(5)重载[]运算符,若索引值i越界,则输出"Out of boundary"并退出程序,否则返回第i个数据元素;

(6)基于<algorithm>中的sort函数定义成员函数void Array<T>::sort(),实现数组排序;

(7)设计成员函数int Array<T>::search(T e)const,若查找成功返回非负索引值,否则返回-1;

(8)设计函数模板void Process(Array<T> &a)用于测试数组类模板。

main函数对应测试代码如下:

int main()
{
    string type;
    int n;

    cin >> type >> n;
    if (type=="int")
    {
        Array<int> a(n);
        Process(a);
    }
    else if (type=="double")
    {
        Array<double> a(n);
        Process(a);
    }
    else if (type=="string")
    {
        Array<string> a(n);
        Process(a);
    }
    else
        cout << "Input error!" << endl;

    return 0;
}

二.输入与输出

Input

数据类型type和元素个数n

n个数据元素

索引值pos

查找键值key

Output

排序前数据序列

排序后数据序列

索引值pos对应数据元素

查找到的数据元素索引值

Sample Input 1

复制代码
int 5
18 2 4 6 25
2
6

Sample Output 1

复制代码
18 2 4 6 25
2 4 6 18 25
6
2

Sample Input 2

复制代码
double 6
24.5 3.6 18.3 96.4 102.56 88.1
3
102

Sample Output 2

复制代码
24.5 3.6 18.3 96.4 102.56 88.1
3.6 18.3 24.5 88.1 96.4 102.56
88.1
-1

Sample Input 3

复制代码
string 7
dispose campus budget slip bacteria consume blast
7
campus

Sample Output 3

复制代码
dispose campus budget slip bacteria consume blast
bacteria blast budget campus consume dispose slip
Out of boundary!

三.代码

cpp 复制代码
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
template<typename T>
class Array{
    int size_;
    T *arr;
public:
    Array(int n):size_(n){this->arr=new T[n];}
    ~Array(){delete[] arr;}
    int getsize()const{return this->size_;}
    template<typename Ti>
    friend istream &operator>>(istream& in,Array<Ti>& arr);
    template<typename To>
    friend ostream &operator<<(ostream& in,const Array<To>& arr);
    void sort_arr(){sort(arr,arr+size_);}
    int Search(T e){
        for(int i=0;i<size_;i++){
            if(arr[i]==e)
                return i;
        }
        return -1;
    }
    T& operator[](const int index){
        if(index<0 || index>=this->size_){
            cout<<"Out of boundary!"<<endl;
            exit(0);
        }
        return this->arr[index];
    }
};
template <typename T>
void Process(Array<T> &a){
        int pos;
        T e;
        cin>>a;
        cout<<a<<endl;
        a.sort_arr();
        cout<<a<<endl;
        cin>>pos;
        cout<<a[pos]<<endl;
        cin>>e;
        cout<<a.Search(e)<<endl;
}
template<typename Ti>
istream &operator>>(istream& in,Array<Ti>& obj){
    for(int i=0;i<obj.getsize();i++)
        in>>obj.arr[i];
    return in;
}
template<typename To>
ostream &operator<<(ostream& out,const Array<To>& obj){
    int i;
    for(i=0;i<obj.getsize()-1;i++){
        	out<<obj.arr[i]<<" ";
    }
    out<<obj.arr[i];
    return out;
}
int main()
{
    string type;
    int n;

    cin >> type >> n;
    if (type=="int")
    {
        Array<int> a(n);
        Process(a);
    }
    else if (type=="double")
    {
        Array<double> a(n);
        Process(a);
    }
    else if (type=="string")
    {
        Array<string> a(n);
        Process(a);
    }
    else
        cout << "Input error!" << endl;

    return 0;
}
相关推荐
小字节,大梦想24 分钟前
【C++】二叉搜索树
数据结构·c++
吾名招财26 分钟前
yolov5-7.0模型DNN加载函数及参数详解(重要)
c++·人工智能·yolo·dnn
我是哈哈hh1 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
憧憬成为原神糕手1 小时前
c++_ 多态
开发语言·c++
郭二哈1 小时前
C++——模板进阶、继承
java·服务器·c++
挥剑决浮云 -1 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
丶Darling.1 小时前
LeetCode Hot100 | Day1 | 二叉树:二叉树的直径
数据结构·c++·学习·算法·leetcode·二叉树
labuladuo5202 小时前
Codeforces Round 977 (Div. 2) C2 Adjust The Presentation (Hard Version)(思维,set)
数据结构·c++·算法
小柯J桑_2 小时前
C++:STL简介
c++·stl
咖啡里的茶i2 小时前
C++之继承
c++