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

day47:C++ day7,异常处理、using的第三种用法、类型转换、lambda表达式、STL标准模板库

my_vectoers.h:

#ifndef MY_VECTORS_H
#define MY_VECTORS_H
#include <iostream>using namespace std;template<typename TYPE>
class my_vectors
{
private:TYPE* ptr;int num;int cnum;TYPE* start_ptr=NULL;TYPE* end_ptr=NULL;
public://无参构造my_vectors(){};//有参构造my_vectors(int num,const TYPE &val1);//拷贝构造my_vectors(const my_vectors &L);//拷贝构造2my_vectors(TYPE* start,TYPE* end);//=运算符重载bool operator=(const my_vectors &L);//>运算符重载bool operator>(const my_vectors &L);//[]运算符重载TYPE & operator[](int index);//assign函数1void assign(TYPE* start,TYPE* end);//assign函数2void assign( int num, const TYPE &val2 );//at函数TYPE at( int pos );//back函数TYPE back();//伪begin函数TYPE* begin();//capacity 函数int capacity();//clear 函数void clear();//empty 函数bool empty();//full 函数bool full();//伪end函数TYPE* end();//front函数TYPE front();//insert函数1TYPE* insert( int loc, const TYPE &val );//insert函数2void insert( int loc, int num, const TYPE &val );//insert函数3void insert( int loc, TYPE* start, TYPE* end );//max_size 函数int max_size();//pop_back函数void pop_back();//push_back 函数void push_back( const TYPE &val );//伪rbegin 函数TYPE* rbegin();//伪rend 函数TYPE* rend();//resize 函数void resize( int size, TYPE val );//size 函数int size();//swap 函数void swap( my_vectors &from );//三杯水void swap(TYPE &a,TYPE &b);
};#endif // MY_VECTORS_H

my_vector.cpp:

#include "my_vectors.h"//有参构造
template<typename TYPE>
my_vectors<TYPE>::my_vectors(int num,const TYPE &val1)
{this->num=num;cnum=num;ptr=new TYPE(num);for(int i=0;i<num;i++){ptr[i]=val1;}start_ptr=ptr;end_ptr=ptr+num-1;
}//拷贝构造
template<typename TYPE>
my_vectors<TYPE>::my_vectors(const my_vectors &L)
{this->num=L.num;cnum=num;ptr=new TYPE(L.num);memcpy(this,&L);start_ptr=ptr;end_ptr=ptr+num-1;
}//拷贝构造2
template<typename TYPE>
my_vectors<TYPE>::my_vectors(TYPE* start,TYPE* end)
{num=(end-start)/sizeof(TYPE);cnum=num;ptr=new TYPE(num);memcpy(ptr,start,sizeof(TYPE)*num);start_ptr=ptr;end_ptr=ptr+num-1;
}//=运算符重载
template<typename TYPE>
bool my_vectors<TYPE>::operator=(const my_vectors &L)
{if(num == L.num && memcmp(ptr,L.ptr,sizeof(num)) == 0){return true;}return false;
}//>运算符重载
template<typename TYPE>
bool my_vectors<TYPE>::operator>(const my_vectors &L)
{if(num > L.num){return true;}else if(num == L.num && memcmp(ptr,L.ptr,sizeof(num)) > 0){return true;}else{return false;}
}//[]运算符重载
template<typename TYPE>
TYPE &my_vectors<TYPE>::operator[](int index)
{return *(ptr+index);
}//assign函数1
template<typename TYPE>
void my_vectors<TYPE>::assign(TYPE* start,TYPE* end)
{delete []ptr;num=(end-start)/sizeof(TYPE);cnum=num;ptr=new TYPE(num);memcpy(ptr,start,sizeof(TYPE)*num);start_ptr=ptr;end_ptr=ptr+num-1;
}//assign函数2
template<typename TYPE>
void my_vectors<TYPE>::assign( int num, const TYPE &val2 )
{delete []ptr;this->num=num;cnum=num;ptr=new TYPE(num);for(int i=0;i<num;i++){ptr[i]=val2;}start_ptr=ptr;end_ptr=ptr+num-1;
}//at函数
template<typename TYPE>
TYPE my_vectors<TYPE>::at( int pos )
{return ptr[pos];
}//back函数
template<typename TYPE>
TYPE my_vectors<TYPE>::back()
{return end_ptr;
}//伪begin函数
template<typename TYPE>
TYPE* my_vectors<TYPE>::begin()
{return start_ptr;
}//capacity 函数
template<typename TYPE>
int my_vectors<TYPE>::capacity()
{return cnum;
}//clear 函数
template<typename TYPE>
void my_vectors<TYPE>::clear()
{while(!empty()){pop_back();}
}//empty 函数
template<typename TYPE>
bool my_vectors<TYPE>::empty()
{return start_ptr==end_ptr==NULL;
}//full 函数
template<typename TYPE>
bool my_vectors<TYPE>::full()
{return ((end_ptr-start_ptr)/sizeof(TYPE))==num;
}//伪end函数
template<typename TYPE>
TYPE* my_vectors<TYPE>::end()
{return end_ptr;
}//front函数
template<typename TYPE>
TYPE my_vectors<TYPE>::front()
{return &ptr[0];
}//insert函数1
template<typename TYPE>
TYPE* my_vectors<TYPE>::insert( int loc, const TYPE &val )
{if(full()){cnum*=2;TYPE s[num];memcpy(s,this,sizeof(TYPE)*num);delete []ptr;ptr=new TYPE(cnum);memcpy(ptr,s,sizeof(TYPE)*num);}for(int i=ptr+num+1;i>=ptr+loc-1;i--){*(ptr+i)=*(ptr+i-1);}*(ptr+loc-1)=val;num++;return ptr+loc-1;
}//insert函数2
template<typename TYPE>
void my_vectors<TYPE>::insert( int loc, int num, const TYPE &val )
{if(full()){while(cnum<this->num+num){cnum*=2;}TYPE s[num];memcpy(s,this,sizeof(TYPE)*num);delete []ptr;ptr=new TYPE(cnum);memcpy(ptr,s,sizeof(TYPE)*num);}for(int i=loc-1;i<loc+num;i++){*ptr[i]=val;}num++;
}//insert函数3
template<typename TYPE>
void my_vectors<TYPE>::insert( int loc, TYPE* start, TYPE* end )
{int size=(end-start)/sizeof(TYPE);if(full()){while(cnum<this->num+size){cnum*=2;}TYPE s[num];memcpy(s,this,sizeof(TYPE)*num);delete []ptr;ptr=new TYPE(cnum);memcpy(ptr,s,sizeof(TYPE)*num);}TYPE s1[num];memcpy(s1,ptr+loc-1,sizeof(TYPE)*(num-loc));memcpy(ptr+loc-1,start,sizeof(TYPE)*size);memcpy(ptr+loc-1+size,s1,sizeof(TYPE)*(num-loc));num++;
}//max_size 函数
template<typename TYPE>
int my_vectors<TYPE>::max_size()
{return cnum;
}//pop_back函数
template<typename TYPE>
void my_vectors<TYPE>::pop_back()
{*end_ptr=ptr[num-1];num--;
}//push_back 函数
template<typename TYPE>
void my_vectors<TYPE>::push_back( const TYPE &val )
{if(full()){cnum*=2;TYPE s[num];memcpy(s,this,sizeof(TYPE)*num);delete []ptr;ptr=new TYPE(cnum);memcpy(ptr,s,sizeof(TYPE)*num);}*(ptr+num)=val;
}//伪rbegin 函数
template<typename TYPE>
TYPE* my_vectors<TYPE>::rbegin()
{return end_ptr;
}//伪rend 函数
template<typename TYPE>
TYPE* my_vectors<TYPE>::rend()
{return start_ptr;
}//resize 函数
template<typename TYPE>
void my_vectors<TYPE>::resize( int size, TYPE val )
{delete[] ptr;ptr=new TYPE(size);num=size;cnum=size;for(int i=0;i<size;i++){*(ptr+i)=val;}start_ptr=ptr;end_ptr=ptr+size-1;
}//size 函数
template<typename TYPE>
int my_vectors<TYPE>::size()
{return num;
}//swap 函数
template<typename TYPE>
void my_vectors<TYPE>::swap( my_vectors &from )
{swap(this->ptr,from.ptr);swap(this->num,from.num);swap(this->cnum,from.cnum);swap(this->start_ptr,from.start_ptr);swap(this->end_ptr,from.end_ptr);
}//三杯水
template<typename TYPE>
void my_vectors<TYPE>::swap(TYPE &a,TYPE &b)
{TYPE temp;temp=a;a=b;b=temp;
}

思维导图:有道云笔记

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

相关文章:

  • function—— Verilog的函数
  • runtime过程中,常见jar问题解决
  • ElementPlus· banner轮播图实现
  • Linux自动化构建项目工具——Makefile/makefile
  • 第11章 字符串和字符串函数
  • TypeScript项目配置
  • 【Spring面试】二、BeanFactory与IoC容器的加载
  • Android嵌套事务
  • 如何让项目准时上线?
  • ChatGPT 和 Elasticsearch:APM 工具、性能和成本分析
  • 不使用辅助变量的前提下实现两个变量的交换
  • SV-DJS-i13电梯对讲网关
  • 论文解析-基因序列编码算法DeepSEA
  • 计组与操作系统
  • Pytorch中张量矩阵乘法函数(mm, bmm, matmul)使用说明,含高维张量实例及运行结果
  • 如何在matlab绘图的标题中添加变量?变量的格式化字符串输出浅析
  • Spring MVC 八 - 内置过滤器
  • @Change监听事件与vue监听属性:watch的区别?
  • C++面试记录之中望软件
  • 多功能翻译工具:全球翻译、润色和摘要生成 | 开源日报 0914
  • 在 Vue.js 中,使用 watch 监听data变量如:对象属性/data变量
  • vue中预览xml并高亮显示
  • MFC中嵌入显示opencv窗口
  • 金鸣识别网页版:轻松实现表格识别的神器
  • DasViewer可以设置打开指定文件吗?
  • uniapp微信小程序用户隐私保护指引弹窗组件
  • Java的反射应用(Method和Class)
  • Java之泛型系列--Class使用泛型的方法(有示例)
  • 【【无用的知识之串口学习】】
  • 9月13日上课内容 第三章 ELK日志分析系统