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

C++学习9.27

1、顺序表、栈、队列都更改成模板类

(1)顺序表

#include <iostream>
#include <cstring>using namespace std;template <typename T1,typename T2,typename T3>
class My_string
{
private:T1 *ptr;         //指向字符数组的指针T2 size;           //字符串的最大容量T3 len;            //字符串当前容量public://无参构造My_string():size(15){this->ptr = new char[size];this->ptr[0] = '\0';            //表示串为空串this->len = 0;}//有参构造My_string(const T1 src){len = strlen(src);size = len+1;ptr = new char[size];strcpy(ptr,src);}My_string(T2 num, T1 value): size(num+1),len(num){ptr = new char[size];for(int i=0;i<num;i++){ptr[i] = value;}ptr[num] = '\0';}//拷贝构造My_string(const T1 &other):size(other.size),len(other.len){ptr = new char[size];strcpy(ptr,other.ptr);}//拷贝赋值template <typename T>My_string & operator =(const T &other){if(this ==&other){return *this;}delete [] ptr;size = other.size;len = other.len;ptr = new char[size];strcpy(ptr,other.ptr);return *this;}//析构函数~My_string(){delete [] ptr;}//判空bool  empty(){return len ==0;}//尾插template <typename T>void  push_back(T value){if(len+1>=size){size *=2;char* new_ptr = new char[size];strcpy(new_ptr,ptr);delete []ptr;ptr = new_ptr;}ptr[len] = value;len++;ptr[len] = '\0';}//尾删void  pop_back(){if(len>0){len--;ptr[len]='\0';}}//at函数实现template <typename T>char &at(T index){if(index<0 ||index>=len){//throw  out_of_range("超出");}return ptr[index];}//清空函数void  clear(){len = 0;ptr[0] = '\0';}//返回C风格字符串char* data(){return ptr;}//返回实际长度int  get_length(){return len;}//返回当前最大容量int  get_size(){return size;}void show(){cout<<ptr<<" ";}};int main()
{My_string <char,int,int>s1;s1.push_back<char>('d');s1.show();}

(2)栈

#include <iostream>using namespace std;template <typename T1,typename T2,typename T3>
class My_stack
{
private:T1 *ptr;T2 size;T3 top;public:My_stack():size(20),top(-1){ptr = new char[size];}My_stack(int num){size = num;ptr = new  char[num];top = -1;}template <typename T>My_stack(const T &other){top = other.top;size = other.size;ptr = new char[size];for(int i=0;i<size;i++){ptr[i] = other.ptr[i];}}template <typename T>My_stack &operator=(const T &other){if(this==&other){return *this;}delete [] ptr;top = other.top;size = other.size;ptr = new char[size];for(int i=0;i<size;i++){ptr[i] = other.ptr[i];}return *this;}char My_top(){return ptr[top];}void My_empty(){if(top==-1){cout<<"栈为空"<<endl;}else{cout<<"栈不为空"<<endl;}}int My_size(){return top+1;}template <typename T>void My_push(const T dat){if(top+1==size){cout<<"栈满不能继续添加"<<endl;}else{ptr[++top] = dat;}}void My_pop(){ptr[top--] = 0;}};int main()
{My_stack <char,int,int>my_stack;my_stack.My_push('1');my_stack.My_push('2');my_stack.My_push('3');cout << "Top: " << my_stack.My_top() <<endl;my_stack.My_pop();my_stack.My_empty();cout << "Size: " << my_stack.My_size() <<endl;return 0;
}

(3)队列

#include <iostream>using namespace std;#include <iostream>
#include <stdexcept>template<typename T1,typename T2,typename T3,typename T4>
class My_queue
{
private:T1 *ptr;T2 size;T3 back;T4 fro;public:My_queue():size(20),back(0),fro(0){ptr = new char[size];}template<typename T>My_queue(T num){size = num;ptr = new  char[num];back = 0;fro = 0;}~My_queue(){delete [] ptr;}template<typename T>My_queue(const T &other){fro = other.fro;back = other.back;size = other.size;ptr = new char[size];for(int i=0;i<size;i++){ptr[i] = other.ptr[i];}}template<typename T>My_queue &operator=(const T &other){if(this==&other){return *this;}delete [] ptr;fro = other.fro;back = other.back;size = other.size;ptr = new char[size];for(int i=0;i<size;i++){ptr[i] = other.ptr[i];}return *this;}char My_front(){return ptr[fro];}char My_back(){return ptr[back-1];}bool My_empty(){return fro == back;}int My_size(){return back - fro;}template<typename T>void My_push(const T dat){if(back+1==size){cout<<"栈满不能继续添加"<<endl;}else{ptr[back++] = dat;}}void My_pop(){ptr[fro++] = 0;}};int main()
{My_queue <char,int,int,int> my_queue;my_queue.My_push('c');my_queue.My_push('2');cout << "Front: " << my_queue.My_front() <<endl; // 输出 1cout<<"back:"<<my_queue.My_back()<<endl;cout << "Size: " << my_queue.My_size() << endl; // 输出 1return 0;
}

2、思维导图

http://www.lryc.cn/news/448117.html

相关文章:

  • 【STM32开发环境搭建】-1-Keil(MDK) 5.27软件安装和注册教程
  • 武汉正向科技格雷母线公司,无人天车系统,采用格雷母线定位技术
  • 【保姆级教程】批量下载Pexels视频Python脚本(以HumanVid数据集为例)
  • Python画笔案例-067 绘制配乐七角星
  • Spark Job 对象 详解
  • C#中NModbus4中常用的方法
  • 【Linux】线程同步与互斥
  • 003、网关路由问题
  • Eclipse 快捷键:提高开发效率的利器
  • Agent智能体
  • 用Promise实现前端并发请求
  • 通过队列实现栈
  • Mac下可以平替paste的软件pastemate,在windows上也能用,还可以实现数据多端同步
  • 106. 从中序与后序遍历序列构造二叉树
  • 监控和日志管理:深入了解Nagios、Zabbix和Prometheus
  • Win10下载Python:一步步指南
  • Race Karts Pack 全管线 卡丁车赛车模型素材
  • C#——switch案例讲解
  • 技术美术一百问(02)
  • 12 函数的应用
  • 鸿蒙开发(NEXT/API 12)【硬件(接入手写套件)】手写功能开发
  • 基于python+flask+mysql的音频信息隐藏系统
  • 18724 二叉树的遍历运算
  • 代理模式简介:静态代理VS与动态代理
  • 使用 Dockerfile 和启动脚本注册 XXL-Job 执行器的正确 IP 地址
  • Python连接Kafka收发数据等操作
  • MySql在更新操作时引入“两阶段提交”的必要性
  • 充气模块方案——无刷充气泵pcba方案
  • [sql-03] 求阅读至少两章的人数
  • Linux如何通过链接下载文件