西北农林科技大学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;
}
相关推荐
怀澈12234 分钟前
高性能服务器模型之Reactor(单线程版本)
linux·服务器·网络·c++
chnming19871 小时前
STL关联式容器之set
开发语言·c++
威桑1 小时前
MinGW 与 MSVC 的区别与联系及相关特性分析
c++·mingw·msvc
熬夜学编程的小王1 小时前
【C++篇】深度解析 C++ List 容器:底层设计与实现揭秘
开发语言·数据结构·c++·stl·list
yigan_Eins1 小时前
【数论】莫比乌斯函数及其反演
c++·经验分享·算法
Mr.131 小时前
什么是 C++ 中的初始化列表?它的作用是什么?初始化列表和在构造函数体内赋值有什么区别?
开发语言·c++
阿史大杯茶1 小时前
AtCoder Beginner Contest 381(ABCDEF 题)视频讲解
数据结构·c++·算法
C++忠实粉丝2 小时前
计算机网络socket编程(3)_UDP网络编程实现简单聊天室
linux·网络·c++·网络协议·计算机网络·udp
我们的五年2 小时前
【Linux课程学习】:进程描述---PCB(Process Control Block)
linux·运维·c++
程序猿阿伟2 小时前
《C++ 实现区块链:区块时间戳的存储与验证机制解析》
开发语言·c++·区块链