这篇文章主要介绍“c++怎么通过模板实现元素的反序”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++怎么通过模板实现元素的反序”文章能帮助大家解决问题。模板概念首先模板分为函数模板和类模板想到模板
这篇文章主要介绍“c++怎么通过模板实现元素的反序”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++怎么通过模板实现元素的反序”文章能帮助大家解决问题。
首先模板分为函数模板和类模板
想到模板,就会联想到泛型编程
泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。
网图:
在之前,我们已经知道了函数重载
还是那一个例子 Swap函数交换 int double char
哪怕是函数重载,我们也要写三个,但是如果有了模板,我们只需要:
告诉编译器一个模板,让编译器根据不同的类型利用该模板来生成代码
这里直接上代码。
#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 7typedef 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文件中去找模板中相应的定义。
关于“C++怎么通过模板实现元素的反序”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网其他教程频道,小编每天都会为大家更新不同的知识点。
--结束END--
本文标题: C++怎么通过模板实现元素的反序
本文链接: https://www.lsjlt.com/news/341965.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0