您的位置:首页 > 编程语言 > C语言/C++

C++ Templates笔记 6 缺省模板实参

2009-12-30 14:10 423 查看
]#include <vector>
#include <stdexcept>
#include <iostream>
#include <deque>
#include <cstdlib>
//std::vector<T> 是CONT的缺省值(缺省模板实参)
template <typename T, typename CONT = std::vector<T> >
class Stack {
private:
CONT 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();
}
};

template <typename T, typename CONT>
void Stack<T,CONT>::push (T const& elem)
{
elems.push_back(elem);    // append copy of passed elem
}

template <typename T, typename 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, typename 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
}
int main()
{
try {
// stack of ints:
Stack<int> intStack;

// stack of doubles which uses a std::deque<> to manage the elements
Stack<double,std::deque<double> > dblStack;

// manipulate int stack
intStack.push(7);
std::cout << intStack.top() << std::endl;
intStack.pop();

// manipulate double stack
dblStack.push(42.42);
std::cout << dblStack.top() << std::endl;
dblStack.pop();
dblStack.pop();
}
catch (std::exception const& ex) {
std::cerr << "Exception: " << ex.what() << std::endl;
return EXIT_FAILURE;  // exit program with ERROR status
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: