爱拍球的程序圆

用C++写了一个栈模板,其间用了一些《Effective C++》的准则,记录在这里喽。这个类还没有做到异常安全,,以后改进! Stack.h文件。

#ifndef _STACK_H_#define _STACK_H_namespace MyDataStructure{template <typename T>class Stack{private:int Capacity;int Top;T* Vals;bool null(){return Capacity == 0;}void init(int capacity){Capacity = capacity;Top = 0;Vals = new T[capacity];}void copy(const Stack& s){Capacity = s.Capacity;Top = s.Top;Vals = NULL;if(s.Capacity != 0){Vals = new T[Capacity];memcpy(Vals,s.Vals,Capacity*sizeof(T));}}void destroy(){if(Vals != NULL) delete []Vals;Top = 0;Capacity = 0;}public:Stack() : Capacity(0),Top(0),Vals(NULL){};Stack(int capacity):Capacity(capacity),Top(0){Vals = new T[capacity];}Stack(const Stack& s){copy(s);}Stack& operator = (const Stack& s){if(this == &s) return *this;destroy();copy(s);return *this;}~Stack(){destroy();}bool resize(int capacity){if(capacity <= 0) return false;if(capacity == Capacity) return true;if(!null()){T* vals = new T[capacity];if(capacity >= Top){memcpy(vals,Vals,Top*sizeof(T));}else{memcpy(vals,Vals,capacity*sizeof(T));Top = capacity;}Capacity = capacity;delete []Vals;Vals = vals;}elseinit(capacity);return true;}bool push(T val){if(!full() && !null()){Vals[Top++] = val;return true;}return false;}bool pop(T& val){if(!null() && !empty()){val = Vals[–Top];return true;}return false;}bool top(T &val){if(!null() && !empty()){val = Vals[Top – 1];return true;}return false;}void clear(){Top = 0;}void size(){return Top;}bool empty(){return Top == 0;}bool full(){return Top == Capacity;}};}#endif

下面是测试函数: StackTest.cpp

MyDataStructure;;int _tmain(int argc, _TCHAR* argv[]){Stack<int> s1(10);for (int i = 1; i < 11; ++i){s1.push(i);}Stack<int> s2(s1);s1.resize(20);for (int i = 1; i < 11; ++i){int val;if(s1.pop(val)){cout<<val<<‘ ‘;}}cout<<endl;for (int i = 1; i < 11; ++i){int val;if(s2.pop(val)){cout<<val<<‘ ‘;}}cout<<endl;return 0;}

任何业绩的质变都来自于量变的积累。

爱拍球的程序圆

相关文章:

你感兴趣的文章:

标签云: