当前位置: 首页 > news >正文

安全数组类模板

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!

示例代码

#include <iostream> #include <string> #include <algorithm> using namespace std; template<typename T> class Array { int size_; T *arr; public: Array(int n) : size_(n) { arr = new T[n]; } ~Array() { delete[] arr; } int getsize() const { return size_; } template<typename Ti> friend istream& operator>>(istream& in, Array<Ti>& arr); template<typename To> friend ostream& operator<<(ostream& out, const Array<To>& arr); // 排序函数,按题目要求命名为 sort void sort() { std::sort(arr, arr + size_); } // 查找函数,按题目要求命名为 search,且为 const 成员 int search(const T& e) const { for (int i = 0; i < size_; ++i) { if (arr[i] == e) return i; } return -1; } T& operator[](const int index) { if (index < 0 || index >= size_) { cout << "Out of boundary!" << endl; exit(0); } return arr[index]; } }; // 输入运算符重载 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) { for (int i = 0; i < obj.getsize(); ++i) { if (i) out << ' '; out << obj.arr[i]; } return out; } // 测试函数模板 template <typename T> void Process(Array<T>& a) { int pos; T e; cin >> a; // 读入数组 cout << a << endl; // 排序前 a.sort(); // 排序(调用 sort) cout << a << endl; // 排序后 cin >> pos; cout << a[pos] << endl; // 输出下标对应元素(可能越界) cin >> e; cout << a.search(e) << endl; // 查找(调用 search) } 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; }
http://www.jsqmd.com/news/842073/

相关文章:

  • NotebookLM引用格式生成突然失准?紧急预警:2024年Q2模型微调导致DOI解析兼容性降级(含临时修复Patch)
  • vue基于springboot框架的校园生活智慧服务平台
  • Spring Boot条件装配原理
  • 毕业写作提质利器盘点:9 大 AI 论文创作工具实测,okbiye 稳居实用首选
  • FPGA驱动RGB屏幕时序详解:从VGA原理到480x272分辨率实战调试记录
  • 基于RP2040与CircuitPython打造可编程USB媒体旋钮:从硬件组装到代码自定义
  • TPS61088RHLR升压芯片:从数据手册到实战PCB设计的完整指南
  • Figma中文界面插件:设计师告别英文困扰的终极解决方案
  • Multi-Agent系统生产环境架构设计:可扩展性、高可用与弹性伸缩完整方案
  • 深度强化学习在无人机控制中的挑战与优化策略
  • 项目管理工具在2026年迎来哪些关键变革?
  • 2026Q2全自动啤酒机厂家名录:四川啤酒机设备/四川精酿啤酒供应链/四川精酿啤酒厂家/成都啤酒机供货商/成都精酿啤酒供应链/选择指南 - 优质品牌商家
  • 树莓派/BeagleBone连接TMP006红外测温传感器Python实战指南
  • 静态站点生成器打造个人导航页:配置驱动与自动化部署实践
  • SMARC模块化电脑标准:嵌入式系统设计、选型与集成实战指南
  • 告别硬件SPI!用Arduino模拟SPI搞定LD3320语音识别的完整指南
  • 2026实验室可燃气体报警器检定装置标杆名录:小型可燃气体报警器检定装置/工业用可燃气体报警器检定装置/工业用配气仪/选择指南 - 优质品牌商家
  • 深入解析SuperIO IT8786E/IT8728F看门狗机制:从寄存器操作到Linux Shell脚本实践
  • 2026年度geo优化公司十强分析解读:榜单背后的五维评估解读
  • Pearcleaner:彻底告别macOS应用残留的终极清理指南
  • 基于Keil MDK的USB HID键盘模拟开发指南
  • 从安装到跑通第一个例程:Halcon 20.11深度学习版环境搭建全记录
  • 时间常数τ:从RC公式到系统动态性能的工程直觉
  • vLLM 多 GPU 与分布式推理:从单卡到多节点
  • Legado-Harmony:打造专属你的纯净阅读空间
  • NotebookLM推荐结果突然失焦?48小时内定位并修复LLM嵌入层梯度偏移的紧急响应手册
  • 嵌入式开发调试实战指南:从硬件排查到软件逻辑的完整心法
  • 2026年近期浙江板式换热器选购指南:为何高力科技备受推崇? - 2026年企业推荐榜
  • NotebookLM研究问题生成黄金窗口期仅剩6个月?Gartner 2024预测下,你必须掌握的5项不可替代能力
  • STM32F407 HAL库实战:42步进电机驱动与PWM调速详解