C++ template--类模版Stack的实现
2014-08-31 13:47
393 查看
类模版Stack的实现
可以看出,类模版Stack<>是通过C++标准库的类模版vector<>来实现的,因此,我们不需要亲自去实现内存管理,拷贝构造函数和赋值运算符,从而可以把精力放在该模板类的接口实现上。
通过声明类型Stack<int>,在类模版内部就可以用int实例化T,因此,intSatck是一个创建自Stack<int>的对象,它的元素储存于vector,且为int。
对于所有被调用的成员函数,都会实例化出基于int类型的函数代码。
注意:只有那些被调用的成员函数,才会产生这些函数的实例化代码。对于类模版,成员函数只有在被使用的时候才会被实例化。
//stack1.hpp #include<vector> #include<stdexcept> using namespace std; template <typename T> class Stack { private: vector<T> elems; public: void push(T const&); void pop(); T top() const; bool empty() const { return elems.empty(); } }; template <typename T> void Stack<T>::push(T const &elem) { elems.push_back(elem);//vector里面最后添加一个,即栈顶添加一个元素 } template <typename T> void Stack<T>::pop() { if(elems.empty()) { throw out_of_range("Stack<>::pop():empty stack"); } elems.pop_back();//vector里面移除最后一个元素,即移除栈顶元素 } template <typename T> T Stack<T>::top() const { if(elems.empty()) { throw out_of_range("Stack<>::top():empty stack"); } return elems.back();//vector里面返回最末一个元素,即stack里面的栈顶元素 }
可以看出,类模版Stack<>是通过C++标准库的类模版vector<>来实现的,因此,我们不需要亲自去实现内存管理,拷贝构造函数和赋值运算符,从而可以把精力放在该模板类的接口实现上。
//main.cpp //类模版Stack实现 #include<iostream> #include<string> #include<vector> #include"stack1.hpp" using namespace std; int main() { Stack<int> intStack; //使用int桟 cout<<"使用int桟"<<endl; for(int i=1;i<6;i++) intStack.push(i); while(!intStack.empty()) { cout<<intStack.top()<<" "; intStack.pop(); } cout<<endl; Stack<string> stringStack; cout<<"请输入string(#退出):"; string str; while(cin>>str) { if(str=="#") break; stringStack.push(str); } while(!stringStack.empty()) { cout<<stringStack.top()<<" "; stringStack.pop(); } cout<<endl; system("pause"); return 0; }
通过声明类型Stack<int>,在类模版内部就可以用int实例化T,因此,intSatck是一个创建自Stack<int>的对象,它的元素储存于vector,且为int。
对于所有被调用的成员函数,都会实例化出基于int类型的函数代码。
注意:只有那些被调用的成员函数,才会产生这些函数的实例化代码。对于类模版,成员函数只有在被使用的时候才会被实例化。
相关文章推荐
- 在C++中用虚函数及模版实现委托
- 在C++中用虚函数及模版实现委托(支持多播)
- C++链表实现堆栈:LinkList:Build a linklist using C++ class Stack
- 简单双向链表(C++模版技术实现)
- 简单单向链表(C++模版技术实现)
- C++实践::Template实现Observer模式
- 简单链式栈(C++模版技术实现)
- C语言中实现通用双链表(类似C++模版的功能)
- C++根据头文件自动生成实现文件框架(支持模版)
- 简单链式队列(C++模版技术实现)
- 用C++的高级模版特性实现一个不需要IDL的RPC
- Stack-c++template
- C++实现一个数组类及其stack适配器
- 模版函数指针,C++委托的实现
- 在C++中用虚函数及模版实现委托(支持自定义参数)(转)
- 在C++中用虚函数及模版实现委托(支持自定义参数)
- stand C++ stack 的实现源码
- 模版函数指针,C++委托的实现-原创
- 模版函数指针,C++委托的实现
- 简单顺序栈(C++模版技术实现)