我有模板类MinMaxHeap,其中有两个堆
template <class T> class MinMaxHeap {
public:
Heap<T> minHeap;
Heap<T> maxHeap;
int Size;
int capacity;
template <class T>
MinMaxHeap<T>::MinMaxHeap(int capacity) {
this->capacity = capacity;
this->Size = 0;
maxHeap = Heap<T>(capacity, false);
minHeap = Heap<T>(capacity, true);
maxHeap.otherHeap = &minHeap;
minHeap.otherHeap = &maxHeap;
}
还有Heap课程:
template <typename T> class Heap {
public:
pair<T, int> *arr;
int capacity;
int size;
Heap<T> *otherHeap;
template <class T>
Heap<T>::Heap() {
}
template <class T>
Heap<T>::Heap(int capacity, bool isMin) {
this->capacity = capacity;
this->size = 0;
arr = new pair<T, int>[this->capacity + 1];
if (isMin) {
arr[0] = pair<T, int>(NULL, 0);
}
else {
arr[0] = pair<T, int>(NULL, 1);
}
}
当我像这样MinMaxHeap<int> heap(20), MinMaxHeap<double> heap(20)
创建MinMaxHeap时,它运行良好,但当我尝试制作MinMaxHeap<String> heap(20)
时出现错误:
MinMaxHeap.exe中的0x55B63E90(ucrtbased.dll)抛出异常: 0xC0000005:访问冲突读取位置0x00000000。
经过一些调试后,我发现这些错误发生在这些行上:
if (isMin) {
arr[0] = pair<T, int>(NULL, 0);
}
else {
arr[0] = pair<T, int>(NULL, 1);
}
如何解决这个问题?
答案 0 :(得分:4)
您无法从空指针创建id="{{ $index +1}}"
。
std::string
不是一个好的选择 - 您应该使用NULL
的“自己的”默认值T
。
答案 1 :(得分:-2)
NULL是c中的一个定义,它是这样的: #define NULL 0
在我看来,它可以隐式地转换为int,并且加倍它不会是一个问题,但在字符串的情况下它不能被转换为字符串。
我认为你只是将这个变量添加到数组中以了解结束的位置,为什么不使用它的大小?和bool知道它是最小还是最大堆?