저는 C++을 배우면서 실제 데이터 형식을 구현하기 시작했습니다. 첫 번째 스택 (이것은 마음에 봄 처음이었습니다). 몇 가지 프로그래밍을했는데 작동하지만 이제는 내가해야 할 일에 대한 의견이 필요합니다. 특정 물건이나 다른 프로 팁을 삭제하는 것과 같습니다. 나는 무엇을해야하고 왜 그렇게해야합니까?더 나은 프로그래밍 실무를 묻는 질문이 입력되었습니다
template <class T>
class Stack
{
private:
int* values;
int capacity;
int itemsOnStack;
public:
///////////////////
Stack()
{
Stack(32);
}
///////////////////
Stack(const int sz)
{
values = new T[sz];
capacity = sz;
itemsOnStack = 0;
}
~Stack()
{
values = 0;
// delete?
}
////////////////////
void Push(const T& item)
{
*(values + itemsOnStack) = item;
itemsOnStack++;
if(itemsOnStack > capacity)
{
capacity *= 2;
T* temp = new T[capacity];
temp = values;
values = new T[capacity];
values = temp;
}
}
///////////////////
T Pop()
{
if(itemsOnStack > 0)
{
int current = --itemsOnStack;
return *(values + current);
}
return NULL; // ? good?
}
///////////////////
T Peek()
{
if(itemsOnStack > 0)
{
int current = itemsOnStack - 1;
return *(values + current);
}
return NULL; // find something better here or shouldnt?
}
///////////////////
int Count()
{
return itemsOnStack;
}
///////////////////
int Capacity()
{
return capacity;
}
///////////////////
bool IsEmpty()
{
return itemsOnStack == 0;
}
};
코드에 p 개의 LOTS가 있습니다. 흠집. 어떤 C++ 책을 배우고 있습니까? –
단지 맛의 문제지만 나는 포인터 색인을위한'values [current]'문법을 선호한다. – Manuel
전체 답변을 게시하지는 않겠지 만 한 가지 힌트 : 귀하의 클래스는 현재'T = int' 일 때만 작동하는 것으로 보입니다. 'values'는'int *'대신'T *'형을 가져야합니다. 그렇지 않으면'Stack'을 템플릿 클래스로 쓰는 데 별다른 의미가 없습니다. – stakx