【发布时间】:2012-04-26 20:30:54
【问题描述】:
家庭作业要求重载 Heap 类的寄售运算符,该类用于在每个节点存储指向队列的指针,以尝试模拟急诊室优先级队列。
到目前为止,这是我想出的代码:
template <typename T>
Heap<T>& Heap<T>::operator=(const Heap<T> & rhs)
{
//check for self-assignment
if(this != &rhs)
{
//delete memory
for(int i = 0; i < MAX_HEAP; i++)
{
//delete queue at position i, set pointer to NULL
delete items[i];
items[i] = NULL;
}//end for
delete * items;
//create new memory to hold copy of rhs
//error occurs here
items = new queue<T> *[MAX_HEAP] ;
for(int i = 0; i < MAX_HEAP; i++)
items[i] = rhs.items[i];
//assigns new stuff to this heap
size = rhs.size;
nodes = rhs.nodes;
}//end if
return *this;
}//end =
items 在头文件中声明如下:
queue<T>* items[MAX_HEAP];
并且是标准库队列的一个实例。
我不太确定我是否使用正确的语法来创建一个新的动态队列指针数组。
我收到一条错误消息:
error C2440: '=' : cannot convert from 'std::queue<_Ty> **' to 'std::queue<_Ty> *[50]'
关于什么可能导致它以及我如何解决它的任何想法?
【问题讨论】:
-
要显着减轻疼痛,请使用copy-and-swap idiom。
-
为什么不直接使用
std::vector而不是C 数组和手动内存管理?将标准库类和 C 数组混合在一起是愚蠢的矫枉过正。 -
堆如何使用队列指针的动态数组?
标签: c++ arrays templates operator-overloading