我需要在运行时为散列表分配创建一个链接列表数组。我们给出的示例代码只允许创建静态大小的数组,我无法弄清楚如何修改它以使用变量,因为我尝试过的所有内容都会导致错误。如何创建动态大小的链接列表数组?
示例代码:
typedef std::list<int> INT_LIST;
typedef INT_LIST* INT_LIST_POINTER;
int size = 13;
INT_LIST_POINTER myArray[size];
INT_LIST_POINTER tmpPtr;
// initialize the array to point to empty lists
for (int i=0; i<size; i++){
tmpPtr = new INT_LIST;
myArray[i] = tmpPtr;
}
在我当前的非工作代码:
typedef std::list<int> INT_LIST;
typedef INT_LIST* INT_LIST_POINTER;
INT_LIST_POINTER myArray = new INT_LIST[p];
INT_LIST_POINTER tmpPtr;
for (int i=0; i<n; i++){
INT_LIST* temp = new INT_LIST;
myArray[i] = temp;
}
的主要问题似乎是与
myArray[i] = temp;
这也不说那些操作数相匹配。
查看'std :: vector.resize'和'std :: vector.push_back'方法。 – 2012-02-29 09:25:44
如果你想结束你的老师,请指出示例代码是无效的C++。它应该是'const int size = 13;'。为了演示这一点,使用例如带有'-pedantic-errors'选项的GCC来禁用非标准语言扩展。 – 2012-02-29 09:42:29
所有大写标识符(按惯例)用于在短时(例如T,U,T2)表示模板参数,否则为预处理器宏。它们不应该用于类型。一个小问题,但足以让我想到谁给你你的示例代码没有线索。此外,为什么当你只需要一个'std :: list'数组时,有一个指向'std :: list'的指针数组?它效率较低,维护性较差(请注意 - 取消分配代码 - “delete”的另一个循环)从样本中缺失)。 – 2012-02-29 10:04:05