使用C++的指针实现一个简单版的栈
stack.h
#ifndef stack_hpp
#define stack_hpp
#include <stdio.h>
class Stack
{
public:
Stack();
~Stack();
bool Push(int value);
int Pop();
private:
unsigned int m_elem_size;
unsigned int m_logic_length;
unsigned int m_alloc_length;
int* m_elems;
};
#endif /* stack_hpp */
stack.cpp
#include "stack.hpp"
#include <stdlib.h>
#include <assert.h>
Stack::Stack()
{
m_elem_size = sizeof(int);
m_logic_length = 0;
m_alloc_length = 4;
m_elems = (int*)malloc(m_alloc_length * sizeof(m_elem_size));
}
Stack::~Stack()
{
free(m_elems);
}
bool Stack::Push(int value)
{
//如果栈已满,根据翻倍策略扩大内存
if(m_logic_length == m_alloc_length)
{
m_alloc_length = m_alloc_length * 2;
m_elems = (int*)realloc(m_elems, m_alloc_length * m_elem_size);
assert(m_elems != NULL);
}
m_elems[m_logic_length] = value;
m_logic_length ++;
return true;
}
int Stack::Pop()
{
assert(m_logic_length > 0);
m_logic_length --;
return m_elems[m_logic_length];
}
main.cpp
#include "stack.hpp"
#include <iostream>
int main(int argc, const char * argv[]) {
Stack stack;
stack.Push(1);
stack.Push(2);
stack.Push(3);
stack.Push(4);
stack.Push(5);
int val = stack.Pop();
std::cout << "val" << val << std::endl;
return 0;
}