C++ template - 模板的模板参数
来源:互联网 发布:python 爬知乎 编辑:程序博客网 时间:2024/06/05 07:46
//stack8.hpp
#include <deque>
#include <stdexcept>
#include <memory>
template <typename T,
template <typename ELEM,
typename = std::allocator<ELEM> >
class CONT = std::deque>
class Stack {
private:
CONT<T> elems; // elements
public:
void push(T const&); // push element
void pop(); // pop element
T top() const; // return top element
bool empty() const { // return whether the stack is empty
return elems.empty();
}
// assign stack of elements of type T2
template<typename T2,
template<typename ELEM2,
typename = std::allocator<ELEM2>
>class CONT2>
Stack<T,CONT>& operator= (Stack<T2,CONT2> const&);
};
template <typename T, template <typename,typename> class CONT>
void Stack<T,CONT>::push (T const& elem)
{
elems.push_back(elem); // append copy of passed elem
}
template<typename T, template <typename,typename> class CONT>
void Stack<T,CONT>::pop ()
{
if (elems.empty()) {
throw std::out_of_range("Stack<>::pop(): empty stack");
}
elems.pop_back(); // remove last element
}
template <typename T, template <typename,typename> class CONT>
T Stack<T,CONT>::top () const
{
if (elems.empty()) {
throw std::out_of_range("Stack<>::top(): empty stack");
}
return elems.back(); // return copy of last element
}
template <typename T, template <typename,typename> class CONT>
template <typename T2, template <typename,typename> class CONT2>
Stack<T,CONT>&
Stack<T,CONT>::operator= (Stack<T2,CONT2> const& op2)
{
if ((void*)this == (void*)&op2) { // assignment to itself?
return *this;
}
Stack<T2,CONT2> tmp(op2); // create a copy of the assigned stack
elems.clear(); // remove existing elements
while (!tmp.empty()) { // copy all elements
elems.push_front(tmp.top());
tmp.pop();
}
return *this;
}
//stack8test.cpp
#include <iostream>
#include <string>
#include <cstdlib>
#include <vector>
#include "stack8.hpp"
int main()
{
try {
Stack<int> intStack; // stack of ints
Stack<float> floatStack; // stack of floats
// manipulate int stack
intStack.push(42);
intStack.push(7);
// manipulate float stack
floatStack.push(7.7);
// assign stacks of different type
floatStack = intStack;
// print float stack
std::cout << floatStack.top() << std::endl;
floatStack.pop();
std::cout << floatStack.top() << std::endl;
floatStack.pop();
std::cout << floatStack.top() << std::endl;
floatStack.pop();
}
catch (std::exception const& ex) {
std::cerr << "Exception: " << ex.what() << std::endl;
}
// stack for ints using a vector as an internal container
Stack<int,std::vector> vStack;
//...
vStack.push(42);
vStack.push(7);
std::cout << vStack.top() << std::endl;
vStack.pop();
}
- C++ template - 模板的模板参数
- C++ Template初探:以模板为参数的模板
- C++template ;模板学习
- C++template模板
- C++template(模板)的使用
- vue的模板 <template></template>
- Template template parameter(模板参数) example
- Template Template Parameters(双重模板参数)
- C++,template,类模板和函数模板
- C/C++函数模板template
- C++template 模板类2
- 模板的模板参数
- [C/C++]_[简单例子看模板template的特性]
- 模板Template
- 模板Template
- 模板(template)
- template 模板
- 模板template
- 创业者必读的一封家书
- 文件编码问题集锦
- B2C杂思:陌生的顾客
- 7-11的布局兵法(转自《实战电子商务》)
- 虚拟内存——Windows核心编程学习手札之十四
- C++ template - 模板的模板参数
- 常用正则表达式
- Struts2.1.x+Spring2.5.x+Hibernate3.2.x实例教程(2)V0.1
- FTP 上传下载,多进程,多线程上传(1)
- 不同的标签初始背景与滑过背景巧妙实现
- 完整正确的wav文件格式分析详解
- Java牛角尖【010】: 当对象a.equals(b)时,a.hashCode == b.hashCode吗?
- c# 根据当前时间获取,本周,本月,本季度,月初,月末,各个时间段
- 使用JavaScript在表中指定位置插入一行