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

网站搜索怎么做的福鼎市建设局网站

网站搜索怎么做的,福鼎市建设局网站,用上海注册的公司建的网站,南宁网站建设专业品牌栈和数组 1.使用类模板实现数组结构定长数组可变数组 2.使用类模板实现栈结构 在我们初步了解编写模板类后#xff0c;应当做一下代码练习。这节我们就做一个编写代码的补充#xff0c;方便大家继续学习模板类的嵌套。作为新手而言#xff0c;建议大家先写一个具体类#x… 栈和数组 1.使用类模板实现数组结构定长数组可变数组 2.使用类模板实现栈结构 在我们初步了解编写模板类后应当做一下代码练习。这节我们就做一个编写代码的补充方便大家继续学习模板类的嵌套。作为新手而言建议大家先写一个具体类调试好后再去修改成模板类因为调试模板类会相对复杂。 1.使用类模板实现数组结构 数组是我们常用的一种数据类型我们今天的内容就先从编写一个数组类模板开始。数组有定长数组和边长数组的区别我们只来实现它们的部分功能。 定长数组 首先我们先学习编写一个int类型的定长数组数组类。我们只实现查看和改写数组的元素即可。这个过程中涉及到重载[]运算符 #define Arraysize 10 class Array {private:int items[Arraysize]; // 声明一个数组这里的[]不是运算符public:int sign0; // 用于标记重载的[]运算符使用了几次Array(){memset(items,0,sizeof(items));} // 使用memset函数初始化数组需要知道首地址、初始化值、数组元素类型所占空间int operator[] (int ii) // 重载[]运算符返回值类型为int的引用{this-sign; // this指针类似于python中的self他默认标记类地址可以查找类内容return *(itemsii);}const int operator[] (int ii) // 如果是const修饰的数组上面的函数将不会被调用const{return *(itemsii);} };这段代码里我偷偷用了一些没有讲到的函数和知识点。包括重载运算符初始化函数和类的this指针。当然这段代码当然没有使用this指针的必要this-sign直接写成sign效果也是一样的。 写好之后我们来测试一下 int main() {Array a;a[0]1;a[1]2;a[2]3;a[3]4;for(int i0;i5;i){couta[i] ;}cout\na.signendl; } // 输出为1 2 3 4 0 // 9接下来我们把它改成函数模板的样子。因为函数模板可以定义已知类型所以我们也可以这样写 template class T, int Arraysize10 class Array {private:T items[Arraysize]; // 声明一个数组这里的[]不是运算符public:int sign0; // 用于标记重载的[]运算符使用了几次Array(){memset(items,0,sizeof(items));} // 使用memset函数初始化数组需要知道首地址、初始化值、数组元素类型所占空间T operator[] (int ii) // 重载[]运算符返回值类型为T的引用{this-sign; // this指针类似于python中的self他默认标记类地址可以查找类内容return *(itemsii);}const T operator[] (int ii) // 如果是const修饰的数组上面的函数将不会被调用const{return *(itemsii);} };再来测试一下 int main() {// Arraydouble,5 a;Arraydouble a;a[0]1;a[1]2;a[2]3;a[3]4;for(int i0;i10;i){couta[i] ;}cout\na.signendl; } // 输出为1 2 3 4 0 0 0 0 0 0 // 14注意非通用类型参数通常是整数型但不绝对这个值在函数模板实例化之后是不可以修改的。定长数组功能实现起来并不难接下来我们试试变长数组。 可变数组 这个功能并不难实现我们仅对上述代码实现少量改动即当访问下标超过数组最大长度时我们要重新分配更大的内存存储这个数组 template class T class Vector {private:int len;T *items; // 声明一个指针变量用于接收动态数组public:Vector(int size5) // C的参数也可以像python一样使用默认参数{lensize;itemsnew T[len];} ~Vector() // 释放动态分配的内存{delete[] items;itemsnullptr;}void resize(int size) // 当数组超出容量时会重新分配内存{T* temp;if (sizelen){tempnew T[size];} // 分配更大的内存else return;for(int i0;ilen;i) // 将旧数组拷贝到新数组{temp[i]items[i];}delete[] items; // 释放原数组itemstemp; // 指向新数组lensize; // 更新数组大小}int size()const{ // 返回数组长度return len;}T operator[] (int ii) // 重载[]运算符返回值类型为T的引用{if (iilen){this-resize(len5); // 分配多五个空间的新数组}return *(itemsii);}const T operator[] (int ii) // 如果是const修饰的数组上面的函数将不会被调用const{return *(itemsii);} };这样就完成了大家可以自行尝试一下。 2.使用类模板实现栈结构 栈是一种先进后出的数据结构我们主要通过类模板实现它的入栈、出栈、判空、判满功能。首先我们编写一个函数实现int类型的栈 class Stack {private:int *items; // 由数组结构定义的栈int stacksize; // 栈含元素数量int top; // 栈顶指针并非指针类型而是类似于数组下标public:// 初始化栈Stack(int size):stacksize(size),top(0){itemsnew int[stacksize];}// 析构函数删除动态空间~Stack(){delete[] items;itemsnullptr;}// 判空函数即判断栈顶指针是否为0bool isempty() const // 不允许在函数内修改任何变量值{return top0;}// 判满函数bool isfull() const{return topstacksize;}// 压栈函数bool push(const int item){if(!isfull()){items[top]item;return true;}else return false;}// 出栈函数bool pop(int item){if(!isempty()){itemitems[--top];return true;}else return false;} };这样我们就实现了定义一个功能简单的处理类型int栈。下面我们先来测试一下各个功能是否正常然后再看看如何把这个具体类制作成类模板 int main() {Stack ss(5);coutss.isempty() ss.isfull()endl;ss.push(1);ss.push(2);ss.push(3);ss.push(4);ss.push(5);coutss.isempty() ss.isfull()endl;int item;while(ss.pop(item)){coutitem ;} } // 输出为1 0 // 0 1 // 5 4 3 2 1这样看起来我们的功能实现的还不错。接下来我们把它定义成可以处理不同数据类型的栈类。我们可以使用 typedef *** Mydata在星号处填入想要处理的类型然后将与items有关的代码全都改成Mydata或Mydata*类。这样做的缺点是我们经常要手动去调整类所处理的数据类型。 在有了类模板之后我们就可以更方便的解决这些问题了 templateclass T class Stack {private:T *items; // 由数组结构定义的栈int stacksize; // 栈含元素数量int top; // 栈顶指针并非指针类型而是类似于数组下标public:// 初始化栈Stack(int size):stacksize(size),top(0){itemsnew T[stacksize];}// 判空和判满不需要改动// 压栈函数bool push(const T item){if(!isfull()){items[top]item;return true;}else return false;}// 出栈函数bool pop(T item){if(!isempty()){itemitems[--top];return true;}else return false;}这样我们就成功的做出了一个模板类实现栈的部分功能了。
http://www.dnsts.com.cn/news/145086.html

相关文章:

  • 上海建设网站公司哪家好wordpress标签云404错误
  • 官方网站打不开怎么回事网站建设推广注意什么
  • 网站工程师培训商城网站建设目标
  • 简洁大气企业网站源码广告模板制作
  • 中山网站建设sipocms做任务赚q币网站
  • 找人给公司做网站去哪找为什么需要响应式网站
  • 青岛建站开发厦门市住房建设网站
  • 产品营销型网站建设网站建设费用 百度文库
  • 网站建设研究意义宜都网站制作
  • 中国最大网站建设公司友情链接的作用有哪些
  • 律师怎样做网站学软件技术需要什么基础
  • 提升政务网站建设水平wordpress 分类折叠
  • 个人网站备案能几个wap 网站
  • 网站云模板广告设计与制作流程
  • 高端的食品行业网站开发鹤山做网站公司
  • 国家补贴软件网站开发政策app的开发流程是什么
  • 媒体发稿网站开发项目宣传网站模板免费下载
  • 推广网站源码六安市程序
  • 乌克兰网站后缀wordpress 页面编辑器
  • 网站建设项目背景建一个营销网站的步骤
  • 广东建设行业招聘 什么网站搭建网站工具
  • 网站名称意义html论坛源码
  • 展示型网站首页设计解析一个网站的建设需要哪些流程图
  • wordpress企业网站建设企业邮箱注册要钱吗
  • 濮阳网站建设公司图书馆网站建设工作
  • 门户网站是以什么为主wordpress 推特
  • 网站建设如何添加咨询河北网站建设口碑好
  • 一手房发帖网站怎样做网站的成功案例
  • 建设银行手机银行网站用户名是什么原因网站开发工作室
  • 建设网站公司地址代做毕网站