栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

c++模板特化之用deque容器实现stack容器

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++模板特化之用deque容器实现stack容器

头文件MyStack_deque.h

#pragma once
#include 
#include 
#include 

//普通模板
template
class MyStack {};

//模板的特化
template<>
class MyStack {
private:
	std::deque elems;//容器

public:
	MyStack();//默认构造,必须有
	void push(std::string const&);//入栈
	void pop();//出栈
	std::string top() const;//返回栈顶元素
	bool empty() const { return elems.empty(); }//返回栈是否为空

};

#define __MYSATCK_DEQUE__
#include "MyStack_deque.cpp"

实现头文件MyStack_deque.cpp

#ifdef __MYSATCK_DEQUE__
//默认构造
inline
MyStack::MyStack(){}

//入栈
inline
void MyStack::push(std::string const& elem) {
	elems.push_back(elem);
}

//出栈
inline
void MyStack::pop() {
	if (elems.empty())
		throw std::out_of_range("Stack::pop(): empty stack");
	elems.pop_back();
}

//返回栈顶元素
inline
std::string MyStack::top() const {
	if (elems.empty())
		throw std::out_of_range("Stack::top(): empty stack");
	return elems.back();
}

#endif // __MYSATCK_DEQUE__

测试main.cpp

#include 
#include 
#include "MyStack_deque.h"


int main()
{
   //特化之用deque实现stack的测试
   {    
       //创建别名
       using  StringStack = MyStack;//c++11新特性,也可以用MyStack_vecotr里的那个typedef

       try {
           StringStack stringStack;//元素类型为string的栈

           //使用string栈
           stringStack.push("hello");//把"hello"入栈
           std::cout << "stringStack top is " << stringStack.top() << std::endl;//返回栈顶元素
           stringStack.pop();//出栈
           stringStack.pop();//故意出空栈,看看会发生什么
       }
       catch (std::exception const& ex) {
           std::cerr << "Exception: " << ex.what() << std::endl;
           return EXIT_FAILURE;
       }
   }


}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/333913.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号