首页 > 代码库 > C++ template--类模版Stack的实现
C++ template--类模版Stack的实现
类模版Stack的实现
//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; }
对于所有被调用的成员函数,都会实例化出基于int类型的函数代码。
注意:只有那些被调用的成员函数,才会产生这些函数的实例化代码。对于类模版,成员函数只有在被使用的时候才会被实例化。
C++ template--类模版Stack的实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。