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

C++ 6

二、myStack

#ifndef MYSTACK_H #define MYSTACK_H #include <iostream> typedef int datatype; using namespace std; class myStack { private: datatype *data; size_t size; size_t capacity; public: myStack():size(0),capacity(5){ //无参构造 data = new datatype [5]; } myStack(size_t cap) //有参构造 { data = new datatype[cap]; capacity = cap; size = 0; } myStack(const myStack& other){ //拷贝构造 if(this != &other) { delete [] this->data; this->size = other.size; this->capacity = other.capacity; this->data = new datatype[this->capacity]; for(size_t i=0;i<this->size;i++) { this->data[i] = other.data[i]; } } } virtual ~myStack() //虚析构函数 { delete []data; } myStack& operator=(const myStack& other); //运算符重载 void expend(); //二倍扩容 datatype& top(); //访问栈顶元素 bool empty(); //检查是否为空 size_t get_size(); //获取元素个数 myStack& push(datatype element); //向栈顶插入元素 myStack& pop(); //删除栈顶元素 }; #endif // MYSTACK_H
#include"myStack.h" myStack& myStack::operator=(const myStack& other) { if (this != &other) { while (this->capacity < other.capacity) { this->expend(); } for (size_t i = 0; i < other.size; ++i) { this->data[i] = other.data[i]; } size = other.size; } return *this; } void myStack::expend() { datatype* Temp = new datatype [capacity*2]; for (size_t i = 0; i < capacity; ++i) { Temp[i] = data[i]; } delete [] data; data = Temp; capacity *= 2; } datatype& myStack::top() { return this->data[size-1]; } bool myStack::empty() { return (this->size == 0); } size_t myStack::get_size() { return this->size; } myStack& myStack::push(datatype element) { if( capacity== (size+1)){ //扩容 this->expend(); } this->data[size] = element; size++; return *this; } myStack& myStack::pop() { size--; return *this; }
#include"myStack.h" int main() { cout<<"*********有参构造,push1,2,3,4,5**************"<<endl; myStack stk1(2); stk1.push(1);stk1.push(2);stk1.push(3);stk1.push(4);stk1.push(5); cout<<"************* top ***********"<<endl; datatype element = stk1.top(); cout<<"top1 = "<<element<<endl; cout<<"*********拷贝构造,top**************"<<endl; myStack stk2(stk1); element = stk2.top(); cout<<"top2 = "<<element<<endl; cout<<"********* pop ***********"<<endl; stk2.pop(); element = stk2.top(); cout<<"top2 = "<<element<<endl; cout<<"****************************"<<endl; return 0; }

三、myQueue

#ifndef MYQUEUE_H #define MYQUEUE_H #ifndef MYSTACK_H #define MYSTACK_H #include <iostream> typedef int datatype; using namespace std; class myQueue { private: datatype *data; size_t frontIndex; size_t backIndex; size_t capacity; public: myQueue():frontIndex(0),backIndex(0),capacity(5){ //无参构造 data = new datatype [5]; } myQueue(size_t cap):frontIndex(0),backIndex(0) //有参构造 //有参构造 { data = new datatype[cap]; capacity = cap; } myQueue(const myQueue& other){ //拷贝构造 if(this != &other) { capacity = other.capacity; data = new datatype[capacity]; frontIndex = other.frontIndex; backIndex = other.backIndex; memcpy(data, other.data, capacity * sizeof(datatype)); } } virtual ~myQueue() //虚析构函数 { delete []data; } myQueue& operator=(const myQueue other); //运算符重载 void expend(); //二倍扩容 datatype& front(); //访问队首元素 datatype& back(); //访问队尾元素 bool empty(); //检查是否为空 size_t get_size(); //获取元素个数 myQueue& push(datatype element); //向栈顶插入元素 myQueue& pop(); //删除栈顶元素 }; #endif // MYSTACK_H #endif // MYQUEUE_H
#include"myQueue.h" myQueue& myQueue::operator=(const myQueue other) { // 检查自赋值 if (this == &other) { return *this; } // 释放原有内存 delete[] data; // 分配新内存并复制数据 capacity = other.capacity; frontIndex = other.frontIndex; backIndex = other.backIndex; data = new datatype[capacity]; memcpy(data, other.data, capacity * sizeof(datatype)); return *this; } void myQueue::expend() { size_t newCapacity = capacity * 2; // 分配新内存并复制原有数据 datatype* newData = new datatype[newCapacity]; memcpy(newData, data, capacity * sizeof(datatype)); // 释放原有内存并将指针指向新内存 delete[] data; data = newData; // 更新容量 capacity = newCapacity; } datatype& myQueue::front() { return data[frontIndex]; } datatype& myQueue::back() { return data[backIndex-1]; } bool myQueue::empty() { return (frontIndex == backIndex); } size_t myQueue::get_size() { return (backIndex - frontIndex); } myQueue& myQueue::push(datatype element) { if(capacity == (backIndex+1)) { //扩容 this->expend(); } this->data[backIndex] = element; this->backIndex++; return *this; } myQueue& myQueue::pop() { if (empty()) { throw std::runtime_error("Queue is empty"); } frontIndex++; return *this; }
#include "myQueue.h" using namespace std; int main() { cout << "*********无参构造,push1,2,3,4,5**************" << endl; myQueue q1; q1.push(1).push(2).push(3).push(4).push(5); cout << "************* front ***********" << endl; datatype element = q1.front(); cout << "front1 = " << element << endl; cout << "*********有参构造,back**************" << endl; myQueue q2(10); q2.push(6).push(7).push(8).push(9).push(10); element = q2.back(); cout << "back2 = " << element << endl; cout << "*********拷贝构造,pop**************" << endl; myQueue q3(q2); q3.pop(); element = q3.front(); cout << "front3 = " << element << endl; cout << "****************************" << endl; return 0; }

http://www.zskr.cn/news/1390034.html

相关文章:

  • 杭州劳力士官方售后养护独家体验:日志型日历卡在半中间、表冠松动进水怎么救?带你走进钱江新城正规售后,看原厂级设备如何通过双重防水测试与精准调校让金劳满血复活 - 亨得利官方维修中心
  • 2026杭州书法艺考机构推荐|紫铜书院:统考断层领先、校考强势突围,录取率行业标杆 - 奔跑123
  • 眼周卡粉细纹用什么?CA眼油 快速吸收12天淡纹服帖 - 全网最美
  • Qt Creator右键“转到槽”报错ui_xxx.h缺失?从项目结构根源解析与一键修复
  • 如何快速配置英雄联盟智能工具箱:面向玩家的完整本地化助手指南
  • 洛雪音乐音源完全指南:3步搭建全网高品质音乐库
  • PS5 NOR Modifier深度解析:如何拯救你的PS5硬件故障?
  • Hindsight记忆过滤:基于时间、类型和标签的精确过滤指南 [特殊字符]
  • Gemma 7B-it 指令微调实战:QLoRA+角色扮演数据高效适配
  • 泉州客多旧货回收:永春餐饮设备回收哪家好 - LYL仔仔
  • TransWeather:基于Transformer的恶劣天气图像修复技术深度解析与实战指南
  • 用Python在5分钟内构建Windows微信自动化机器人:wxauto终极指南
  • ClusterGVis基因表达分析:5分钟掌握专业级数据聚类与可视化
  • PMP项目进度网络图实战——第1篇:甘特图与PERT的融合应用
  • AI音乐生成中的适配器技术:高效微调与跨文化应用
  • iTop服务管理模块详解:打造企业级IT服务目录与SLA监控的完整指南 [特殊字符]
  • KNN怎么做:SPSSAU软件操作步骤与结果指标解读
  • [MAF预定义的IChatClient中间件-01]LoggingChatClient——在LLM调用前后输出日志
  • 汕头市贵金属全品类回收同城靠谱回收门店权威:黄金+白银+铂金+钯金当场检测当面结算及联系方式推荐 - 亦辰小黄鸭
  • Linux中实现开机自启动的几种常见方式及区别详解
  • SchoolCMS:如何用开源系统彻底解决中小学校教务管理难题
  • ROS 2自主移动机器人(AMR)数据通信与共享(2)
  • 从新手到专家:BilibiliHistoryFetcher日志监控与邮件告警配置
  • iniparser与C++集成:如何在C++项目中安全使用C语言INI解析库
  • Python驱动CFD革命:5步掌握PyFluent的终极指南
  • 大模型自主智能体记忆与反思机制设计如何落地企业?一篇深度解构与提效实战
  • 韶山市贵金属全品类回收同城靠谱回收门店权威:黄金+白银+铂金+钯金当场检测当面结算及联系方式推荐 - 亦辰小黄鸭
  • 使用Qwen3-Coder-30B-A3B-Instruct-FP8进行企业级代码审查与重构:提升代码质量的终极指南
  • DDrawCompat完整指南:让经典DirectDraw游戏在现代Windows上完美运行的免费兼容层
  • 【创新未发表】离散开停机制氨调度与多场景全年评估研究(Matlab代码、Python、数据、word论文)