C++ 深度复制(可能与指针相关)
所以我尝试深度复制我的哈希表。我的哈希表是一个充满链表的数组。 我已经编写了链表构造函数/复制构造函数/重写操作符,它们工作得非常好 所以我编写了以下代码,但是for循环中有一个问题C++ 深度复制(可能与指针相关),c++,pointers,linked-list,C++,Pointers,Linked List,所以我尝试深度复制我的哈希表。我的哈希表是一个充满链表的数组。 我已经编写了链表构造函数/复制构造函数/重写操作符,它们工作得非常好 所以我编写了以下代码,但是for循环中有一个问题 HashTable.cpp HashTable::HashTable() { } HashTable::HashTable(const HashTable & ht) { bucketSize = ht.bucketSize; count = ht.count; LinkedLis
HashTable.cpp
HashTable::HashTable()
{
}
HashTable::HashTable(const HashTable & ht)
{
bucketSize = ht.bucketSize;
count = ht.count;
LinkedList** table = new LinkedList*[ht.bucketSize];
for (int i = 0; i < bucketSize; i++) {
table[i] = new LinkedList(ht.table[i]);
}
}
HashTable.h
class HashTable {
public:
HashTable();
HashTable(const HashTable& ht);
private:
// Add your member variables and any private member functions here
int bucketSize = defaultCapacity; //default is 101
int count = 0;
LinkedList table[defaultCapacity];
}
HashTable.cpp
HashTable::HashTable()
{
}
HashTable::HashTable(常量HashTable&ht)
{
bucketSize=ht.bucketSize;
count=ht.count;
LinkedList**table=新LinkedList*[ht.bucketSize];
对于(int i=0;i
我怀疑它与指针有关,但是没有错误消息,只有当我按下run:abort()时弹出的一个窗口被调用。在提供的源代码中,类和构造函数声明中都有错误。为了更好地检测这些误解,最好在编译器解析源代码时提供源代码 第一步-在
类哈希表
中,所有变量只声明,不初始化
表
变量必须存储链接列表的数组
。这是一个
LinkedList**表代码>在复制构造函数中声明
第二步-默认构造函数哈希表(void)代码>将使用DefaultCapacity
参数
在默认构造函数哈希表(void)
中,将创建一个defaultCapacity
数组并
使用默认的LinkedList()
=空列表初始化
请尝试创建一个并向我们展示。另外,您认为在复制构造函数中使用名为table
的成员变量和同名的局部变量不会有问题吗?如果我将该行更改为:table=new LinkedList[ht.bucketSize];我得到一个错误,它说,表必须是一个可修改的左值。但我不想改变它。我试图创建一个新的哈希表,而不是修改现有的哈希表。这是因为table
是一个数组,而不是指针。不要使用数组(或指针),而是使用std::vector
在构造函数中声明了LinkedList**table
,它覆盖了前面的数组。
class HashTable {
public:
HashTable(void);
HashTable(const HashTable& ht);
private:
// Add your member variables and any private member functions here
int bucketSize;
int count;
LinkedList **table;
};
HashTable::HashTable(void)
{
bucketSize = defaultCapacity; //default is 101
count = 0;
table = new LinkedList*[bucketSize];
for (int i = 0; i < bucketSize; i++) {
table[i] = new LinkedList();
}
}
HashTable::HashTable(const HashTable & ht)
{
bucketSize = ht.bucketSize;
count = ht.count;
//LinkedList** table = new LinkedList*[ht.bucketSize];
table = new LinkedList*[ht.bucketSize];
for (int i = 0; i < bucketSize; i++) {
table[i] = new LinkedList(ht.table[i]);
}
}