C++ Templates之类模板

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26822029/article/details/81075067

在《C++ Templates》第三章介绍类模板的概念,并借助vector实现Stack类模板。实现代码如下:

#include <iostream>
#include <vector>
#include <stdexcept>
using namespace std;

template <typename T>
class Stack {
private:
	vector<T> elems;
	
public:
	void push(T const&);
	T pop();
	T top() const;
	bool empty() const {
		return elems.empty();
	}
};


template <typename T>
void Stack<T>::push(T const& e_em)
{
	elems.push_back(e_em);
}

template <typename T>
T Stack<T>::pop()
{
	if (elems.empty()) {
		throw out_of_range("Stack<>::pop() : empty stack");
	}
	T elem = elems.back();
	elems.pop_back();
	return elem;
}

template <typename T>
T Stack<T>::top() const
{
	if (elems.empty()) {
		throw out_of_range("Stack<>::top() : empty stack");
	}
	return elems.back();
} 
 
int main()
{
	Stack<int> stack;
	stack.push(1);
	stack.push(3);
	cout << stack.pop();
	return 0;
}

其实类模板的应用方法和函数模板的应用方法大同小异,通过仔细阅读上面的代码相信你能够掌握其基本用法。下面就这段代码进行学习小结:

1.类模板Stack<>是通过C++标准库的类模板vector<>来实现的。可以将vector看作动态数组,当其申请的空间用完时,能够自动申请一块新的空间,然后将现有内容复制到新空间中再释放旧空间。在使用可以手动指定初始大小,如:std::vector<int> vec(10);也可以不指定大小,使用默认的值,空间大小的管理完全交给模板来控制。vector的函数使用文档在这里可以了解一下。常用的如push_back()将在数组尾部追加元素,pop_back()将在数组尾部移除元素。

2. stdexcept头文件是C++标准库定义的异常处理库。stdexcept定义了一些标准的异常类,主要分为两大类:逻辑错误和运行时错误。

在示例代码中使用了out_of_range异常函数,如果发生异常会打印如下错误并推出程序:

猜你喜欢

转载自blog.csdn.net/qq_26822029/article/details/81075067