这个问题来自“Thinking in C++” Vol-1,Chapter 5's practice No.14:
使用“柴郡猫”技术创建一个 StackOfInt 类(一个包含整数的堆栈),该技术隐藏了用于将元素存储在名为 StackImp 的类中的低级数据结构。实现两种版本的 StackImp:一种使用固定长度的 int 数组,另一种使用向量。为堆栈预设最大大小,因此您不必担心在第一个版本中扩展数组。请注意,StackOfInt.h 类不必随 StackImp 更改。
StackOfInt.h
这是我创建的头文件 ( ):
#ifndef STACKOFINT_H
#define STACKOFINT_H
class StackOfInt
{
int size;
int curr_idx;
class StackImp;
StackImp* head;
public:
void initialize(int max);
void push(void* dat);
void* peek();
void* pop();
void cleanup();
};
#endif
但是,对于实现,我对如何处理数组和向量之间的差异感到困惑。到目前为止,这是我想出的:
#include "StackOfInt.h"
#include "require.h"
#include <vector>
class StackOfInt::StackImp
{
int arrInt[50];
public:
void initialize()
{
for (int i = 0; i < 50; i++)
{
arrInt[i] = 0;
}
}
};
/*
class StackOfInt::StackImp
{
std::vector<int> vecInt;
}
*/
void StackOfInt::initialize(int max)
{
size = max;
curr_idx = 0;
head = 0;
StackImp* newImp = new StackImp;
newImp->initialize();
}
void StackOfInt::push(void* dat)
{
*(head+curr_idx) = dat;
curr_idx++;
}
void* Stack::peek(int idx)
{
require(head != 0, "Stack empty");
return head[idx];
}
void Stack::cleanup()
{
require(head == 0, "Stack not empty");
} ///:~
我想我走错了路,谁能给我一些关于如何解决这个问题的提示?