C++之模板

文章介绍了C++中的模板概念,包括函数模板和类模板,用于实现参数化多态。通过示例展示了如何使用模板创建.printArray函数打印数组内容,以及创建一个stack模板类实现基本的栈操作。模板使得代码能应用于不同数据类型,提高代码复用性。
摘要由CSDN通过智能技术生成

模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计。C++ 的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO Stream。

模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。

模板是一种对类型进行参数化的工具;

通常有两种形式:函数模板和类模板;

函数模板 针对仅参数类型不同的函数;
类模板 针对仅数据成员和成员函数类型不同的类。

使用模板的目的就是能够让程序员编写与类型无关的代码。

.printArray模板函数

#include<iostream>
using namespace std;

template<class T>
void printArray(T* a, int n){
	for (int i = 0; i < n; i++)
		cout << a[i]<<" ";
	cout << endl;
}
int main() {
	int a[5] = { 1,2,3,4,5 };
	char b[6] = { "aeiou"};   //别忘了给/0留一个位置。
	double c[4] = { 1.1,1.4,3.2,1 };
	string d[3] = { "i","love" ,"you"};
	cout << "a[] contains :";
	printArray(a, 5);
	cout << "b[] contains :";
	printArray(b, 6);
	cout << "c[] contains :";
	printArray(c, 4);
	cout << "d[] contains :";
	printArray(d, 3);

}
a[] contains :1 2 3 4 5
b[] contains :a e i o u
c[] contains :1.1 1.4 3.2 1
d[] contains :i love you

2.stack模板类

#include<iostream>
using namespace std;

template<class T>
class stack {
private:
	int size;
	int top;
	T* stackPtr;
public:
	stack(int s=10):size(s>0?s:0),top(-1),stackPtr(new T[size]){}
	~stack() {
		delete[]stackPtr;
	}
	bool push(const T& a) {
		if (!isFull()) {
			top++;
			stackPtr[top] = a;
			return true;
		}
		return false;
	}
	bool pop(T& a) {
		if (!isEmpty()) {
			a = stackPtr[top--];
			return true;
		}
		return false;
	}
	bool isEmpty() {
		return top == -1;
	}
	bool isFull() {
		return top == (size - 1);
	}
	void print() const {
		cout << "从下至上输出栈元素 :";
		for (int i = 0; i < size; i++) {
			cout << stackPtr[i]<<" ";
		}
		cout << endl;
	}
};

int main() {
	stack<double> s(5);
	double pushValue = 1.1;
	while (s.push(pushValue)) {
		cout << pushValue << " ";
		pushValue += 1.1;
	}
	cout << "stack is full" << endl;
	cout << "s :";
	s.print();

	double popValue;
	while (s.pop(popValue)) {
		cout << popValue<<" ";
	}
	cout << "stack is empty";


	
}

模板类使用的时候是要声明数据类型的,就像你用的标准模板库里的vector一样。 

1.1 2.2 3.3 4.4 5.5 stack is full
s :从下至上输出栈元素 :1.1 2.2 3.3 4.4 5.5
5.5 4.4 3.3 2.2 1.1 stack is empty

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值