C++使用模板实现元素的反序

实现任意类型序列中元素的反序

  • 所涉知识点
    • 示例代码
      • 开发环境
      • 运行结果
      • 注意

所涉知识点

阅读此文需要掌握的知识点:回调函数,模板类,类模板,栈。

示例代码

这里直接上代码。

#pragma once
#include <Stack>
using namespace std;typedef void(*PRINTSTACK)(void *);template<typename T>
class ReverseArray
{
public:ReverseArray();~ReverseArray();void pushStack(T data);T getTopStack();void popStack();int getSizeStack();void printStack(void * data, PRINTSTACK print);
private:stack<T> m_stack;
};template<typename T>
inline ReverseArray<T>::ReverseArray()
{
}template<typename T>
inline ReverseArray<T>::~ReverseArray()
{
}template<typename T>
inline void ReverseArray<T>::pushStack(T data)
{m_stack.push(data);
}template<typename T>
inline T ReverseArray<T>::getTopStack()
{return T(m_stack.top());
}template<typename T>
inline void ReverseArray<T>::popStack()
{m_stack.pop();
}template<typename T>
inline int ReverseArray<T>::getSizeStack()
{return m_stack.size();
}template<typename T>
inline void ReverseArray<T>::printStack(void* data,PRINTSTACK print)
{print(data);
}

main.cpp

#include <iostream>
#include <string>
#include "ReverseArray.h"
using namespace std;#define CHAR_SIZE 5
#define STRING_SIZE 7
/*
描述:反转数组(任意类型)
*/typedef struct PERSON 
{int age;char name[64];
}Person;void myPrint(void *data)
{Person *p = (Person*)data;cout << "age;" << p->age << " name:" << p->name << endl;
}void printString(void * data) 
{string str = *((string*)data);cout << str << endl;
}void printChar(void * data) 
{char c = *((char*)data);cout << c << endl;
}void test()
{ReverseArray<Person> *pStack = new ReverseArray<Person>;Person p1 = { 3,"hudf"};Person p2 = { 5,"akso"};Person p3 = { 7,"及家属的" };Person p4 = { 8,"口袋"};Person p5 = { 8,"husdh"};pStack->pushStack(p1);pStack->pushStack(p2);pStack->pushStack(p3);pStack->pushStack(p4);pStack->pushStack(p5);while (pStack->getSizeStack() > 0){Person data = pStack->getTopStack();pStack->printStack((void *)&data,myPrint);pStack->popStack();//进出栈操作的是栈顶}cout << "========string array============" << endl;ReverseArray<string> *pStringStack = new ReverseArray<string>;string array[] = { "tyu","hello","start","wei","come","waht","world"};string newArray[STRING_SIZE];
//	cout << array->size() << endl;//这里取第一个字符串中元素的个数for (size_t i = 0; i < STRING_SIZE; ++i){pStringStack->pushStack(array[i]);}cout << "stack size:" << pStringStack->getSizeStack() << endl;int i = 0;while (pStringStack->getSizeStack() > 0){string data = pStringStack->getTopStack();pStringStack->printStack((void *)&data, printString);newArray[i] = data;pStringStack->popStack();//进出栈操作的是栈顶++i;}cout << "=============print newArray============" << endl;for (int i = 0; i < STRING_SIZE; ++i){cout << newArray[i]<< " ";}cout << endl;cout << "========char array============" << endl;ReverseArray<char> *pCharStack = new ReverseArray<char>;char charArray[] = {'a','b','c','d','e'};char newCharArray[CHAR_SIZE];for (size_t i = 0; i < CHAR_SIZE; ++i){pCharStack->pushStack(charArray[i]);}cout << "stack size:" << pCharStack->getSizeStack() << endl;int n = 0;while (pCharStack->getSizeStack() > 0){char data = pCharStack->getTopStack();pCharStack->printStack((void *)&data, printChar);newCharArray[n] = data;pCharStack->popStack();//进出栈操作的是栈顶++n;}cout << "=============print newCharArray============" << endl;for (int i = 0; i < CHAR_SIZE; ++i){cout << newCharArray[i] << " ";}cout << endl;}
int main()
{test();return 0; 
}// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

开发环境

vs2017控制台输出程序。

运行结果

在这里插入图片描述

注意

类模板的使用需要将类的声明与定义放在.h文件中,因为模板本身是一种不确定的类型,编译器在编译的时候需要在.h文件中去找模板中相应的定义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven配置、使用

一、Maven安装与配置 1.1 下载maven安装包&#xff0c;解压即可使用 官网&#xff1a;http://maven.apache.org/download.cgi 1.2 配置maven环境变量 1.2.1 此电脑-【属性】-【高级系统设置】-【环境变量】-【建系统变量】 第一处&#xff1a;M_HOME 解压路径&#xff1a…

5G精华问答 | 5G的关键无线技术是啥?

5G的概念虽然很早就已经提出&#xff0c;但是对于大多数用户来说&#xff0c;真正听到并且对5G有了初步的了解还是在今年。今天就让我们来看看关于5G的精华问答吧。1Q&#xff1a;5G能干什么&#xff1f;A&#xff1a;5G将带来光纤般的“零”时延接入速率&#xff0c;同时将给网…

C++中实现链栈

链栈链栈简述示例代码开发环境运行结果注意链栈简述 链栈从概念上看是链表和栈的结合&#xff0c;含有栈先进后出的特性&#xff0c;也具有链表的动态增加节点的特性&#xff0c;这里相当于在链表的基础上增加只能从一端操作&#xff0c;且保持先进后出的特性。将头节点所在的…

Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案

相信使用Mybaits的小伙伴们一定会经常编写类似如下的代码&#xff1a; 可以看到 userMapper 下有个红色警告。虽然代码本身并没有问题&#xff0c;能正常运行&#xff0c;但有个警告总归有点恶心。本文分析原因&#xff0c;并列出解决该警告的几种方案。 原因 众所周知&…

强封锁之后,华为正寻求10亿美元贷款;苹果发布iOS 12.3.1正式版,出击垃圾短信;联想CFO为“联想搬出中国”言论道歉;...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 中芯国际宣布从美国退…

C++中队列的顺序存储

队列引言示例开发环境运行结果引言 队列先进先出&#xff0c;队头出队&#xff0c;队尾入队&#xff0c;其存储可以分为顺序存储和链式储存。本文记录队列的顺序存储。也就是队列中的元素存储的内存空间是连续的&#xff0c;这里使用数组来模拟线性队列。 示例 直接上代码&a…

全球再迎超级飓风,黑客可利用微软“蠕虫级”高危漏洞暴击全球

戳蓝字“CSDN云计算”关注我们哦&#xff01;WannaCry 余威未散&#xff0c;一场新的全球性“安全浩劫”接踵而来。“WannaCry”勒索病毒爆发刚满两年&#xff0c;Windows再次被曝出一个“蠕虫级”的高危远程漏洞CVE-2019-0708。攻击者一旦成功利用该漏洞&#xff0c;便可以在目…

.net redis定时_一场由fork引发的超时,让我们重新探讨Redis的抖动问题

​​​​​​​​​​​​​​​​​​​​​​​​​​​​摘要&#xff1a;一次由fork引发的时延抖动问题。背景介绍华为云数据库GaussDB(for Redis) 是一款基于计算存储分离架构&#xff0c;兼容Redis生态的云原生NoSQL数据库&#xff1b;它依靠共享存储池实现了强一致&…

C++中关于树的一些定义

树概念树树的叶子节点节点的度分支结点树的度树的高度树的深度二叉树二叉树的特点满二叉树完全二叉树二叉查找树示例代码实现开发环境运行结果概念 本文以一个简单的树为例&#xff0c;如下图&#xff0c;来记录树的一些概念。 树 一种由n个节点组成的具有一定层次关系的有…

02_Spring Cloud Alibaba整合通用Mapper+Lombok+Mysql

Spring CLoud 整合通用MapperLombokMysql 文章目录一、使用Spring Initializr快速创建Spring Boot应用二、相关依赖2.1. 添加依赖2.2. mybatis添加插件2.3. 在resources目录下面创建generator目录存放generatorConfig.xml2.3.1. config.properties配置文件2.3.2. lombok插件2.3…

如何快速深入理解监控知识? | 技术干货

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;叶左左链接&#xff1a;https://www.jianshu.com/p/5d76d31b39580 监…

bootstrap 模态框无法使用_模态窗 Modal Window - 产品中的??注意力设计

本文是「经典交互模式」系列第二篇&#xff0c;前文回顾&#xff1a;面包屑导航 Breadcrumbs Trail全文目录什么是模态窗 模态窗的使用问题 模态框应用实践 什么是模态窗 Modal Window我们在各种不同的屏幕应用中见过「模态窗」&#xff0c;全屏幕模态窗、弹出信息框、&#xf…

QQmlApplicationEngine failed to load component qrc:/main.qml:-1 No such file or directory

记录qml运行时出现的问题问题描述解决办法问题描述 qml项目编译的时候通过&#xff0c;但是在运行时出现图中所示错误提示。 解决办法 在项目所在的文件夹下删除编译生成的目录&#xff0c;我的项目编译生成目录如下图&#xff1a; 删除编译生成的文件夹后&#xff0c;项目…

服务迁移之路 | Spring Cloud向Service Mesh转变 | 技术干货

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a; 李宁转自&#xff1a;博云技术社区Spring Cloud基于Spring Boot开发…

oracle使用关键字做表字段名_ArcGIS SQL使用

本主题将介绍 ArcGIS 中的选择表达式所用的常规查询的各个元素。ArcGIS 中的查询表达式使用常规 SQL 语法。警告&#xff1a;SQL 语法不适用于使用字段计算器计算字段。字段在 SQL 表达式中指定字段时&#xff0c;如果该字段名可能产生岐义(比如与 SQL 保留关键字相同)&#xf…

uml类图浅录

uml类图UML中类图的绘制单个类图的绘制类图中的成员访问属性UML类图中类与类的几种关系关联代码示例解释UML类图表示多重性说明依赖代码示例解释uml类图表示继承示例代码解释UML类图表示实现示例代码解释UML类图表示聚合示例代码UML类图表示组合示例代码解释UML类图表示绘制UML…

03_SpringCloud整合Ribbon实现负载均衡

采用随机负载均衡策略&#xff0c;四线服务之间的调用 2个用户中心&#xff0c;1个内容中心&#xff0c;内容中心调用用户中心服务 package com.itmuch.contentcenter.service.impl;import com.itmuch.contentcenter.dao.content.ShareMapper; import com.itmuch.contentcent…

容器精华问答 | 我们为什么需要容器?

戳蓝字“CSDN云计算”关注我们哦&#xff01;容器技术是这两年热门的话题&#xff0c;因为容器技术给我们带来了很多方便的地方&#xff0c;节约了不少成本&#xff0c;不管是在运维还是开发上。今天&#xff0c;就让我们来看看关于容器更加有深度的问题吧。1Q&#xff1a;什么…

C++11继承构造函数在类中的使用

继承构造函数概念衍生问题使用示例注意扩展使用&#xff08;函数&#xff09;示例代码输出结果注意概念 继承构造函数在C11特性中随之提及&#xff0c;其大概可以理解为&#xff1a; 解决了派生类无法直接使用基类中的构造函数的这一问题。 正常情况下&#xff0c;基类定义了自…

grep从文件末尾开始找_新人自学前端到什么程度才能找工作?

这个问题打我记事起到现在&#xff0c;问过我的人&#xff0c;没有1000也有800了。足以见得这个问题是多么的不得人心。自学前端开发&#xff0c;不管他在网上百度了多少资料&#xff0c;看了多少教程&#xff0c;你总得先做个网页出来。所以&#xff0c;很多人都是从html标签开…