當前位置:
首頁 >
C++ template类模板实现栈 pop push
發布時間:2024/2/28
36
豆豆
生活随笔
收集整理的這篇文章主要介紹了
C++ template类模板实现栈 pop push
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
心得
data = new T[size];這句太坑了,一開始寫成了data = new T(size)圓括號,所以一直隨機性報錯。
我本來以為是ide的問題,在vs2017里就會崩,在dev里不會崩。
檢查好幾遍,才發現是因為把方括號寫成了圓括號,導致new的并不是一個數組,只是一個數占的空間,并且把這個數初始化為圓括號里的數字(100)。
卻在結束時,析構器試圖delete一個數組,所以訪問越界。
況且只new了1個數的空間,卻要把5個數放進去,肯定越界了。
怪不得調試查看內存的時候,pop函數返回時,發現已經被賦值的內存也會被修改。因為在越界的地方賦值,而那塊內存本來就不是我的呀。
代碼
C++,用類模板實現棧
#include<iostream> #include<string> template<class T> class Stack { public:Stack(unsigned int size = 100);//構造器~Stack();//析構器void push(T value);T pop(); private:unsigned int size;unsigned int sp;//指向棧頂的指針T* data;//data是一個數組 };//構造器 template<class T> Stack<T>::Stack(unsigned int size) {this->size = size;data = new T[size];//new運算符會向系統堆區申請足夠的存儲空間,如果申請成功,就返回該內存塊的首地址,如果申請不成功,則返回零值sp = 0;//默認指針指向0 }//析構器 template<class T> Stack<T>::~Stack() {delete[]data; }//push template<class T> void Stack<T>::push(T value) {data[sp] = value;sp++; }//pop template<class T> T Stack<T>::pop() {sp--;return data[sp]; }int main() {Stack <int>intstack(100);intstack.push(1);intstack.push(2);intstack.push(3);intstack.push(4);intstack.push(5);std::cout << intstack.pop() << std::endl;std::cout << intstack.pop() << std::endl;std::cout << intstack.pop() << std::endl;std::cout << intstack.pop() << std::endl;std::cout << intstack.pop() << std::endl;system("pause"); }總結
以上是生活随笔為你收集整理的C++ template类模板实现栈 pop push的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ template函数模板
- 下一篇: C++ iterator迭代器