c/c++语言开发共享C++详解如何通过模板实现元素的反序

所涉知识点阅读此文需要掌握的知识点:回调函数,模板类,类模板,栈。模板概念首先模板分为函数模板和类模板想到模板,就会联想到泛型编程泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编

所涉知识点

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

模板概念

首先模板分为函数模板和类模板

想到模板,就会联想到泛型编程

泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。

网图:

C++详解如何通过模板实现元素的反序

在之前,我们已经知道了函数重载

还是那一个例子 swap函数交换 int double char

哪怕是函数重载,我们也要写三个,但是如果有了模板,我们只需要:

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控制台输出程序。

运行结果

C++详解如何通过模板实现元素的反序

注意

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

到此这篇关于c++详解如何通过模板实现元素的反序的文章就介绍到这了,更多相关c++元素的反序内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

需要了解更多c/c++开发分享C++详解如何通过模板实现元素的反序,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/1237635.html

(0)
上一篇 2022年9月10日
下一篇 2022年9月10日

精彩推荐