1

我正在努力使用声明、创建和操作指向列表对象数组的指针所需的语法。我正在为课程作业创建一个哈希表模板类,使用链接来处理有冲突。

我的哈希表应该是一个list对象数组。std::list是我被允许用于分配的唯一标准库数据类,因此向量已失效。

我的问题是:如何声明一个指向 std::list 数组的指针?我有:

private:
    std::list<T> * table;

如何创建数组?我有:

table = new std::list<T>[3]; // start with table size 3

我认为我有声明和构造的权利,但我不是 100% 确定。最后,我如何与列表交互?我有:

    for (int i = 0; i < _tableSize; i++) { // _tableSize is the array's size
        if (!table[0][i].empty()) {
            table[0][i].push_back(thing);
        }
    }

table不知何故, table[0][i] 访问指向的数组单元格似乎是错误的。它应该是什么样子?

4

3 回答 3

3

既然tablestd::list*,table[i][j]意味着(table + i)->operator[](j); 也就是说,它在从 address 开始j的对象上调用成员函数(带有参数)。std::listtable + i

随之而来的是,因为std::list不重载[]table[0][i].empty()所以是错误的(如果Tinstd::list<T>没有成员函数,则双重错误empty)。

很快,我认为你需要的是一个简单table[list_index_on_array].empty()的检查空虚的方法。

其他一切看起来都不错。

于 2012-06-09T21:32:33.617 回答
0

如果类Foo有一个指向 T 列表数组的指针,它的声明将如下所示:

#define NUMBER_OF_LISTS 100

template <typename T>
class Foo {
    std::list<T> (*table)[NUMBER_OF_LISTS];
    Foo (std::size_t = 1);
};

而且,为了初始化它, Foo 的构造函数可以进行如下分配:

template <typename T>
inline Foo<T>::Foo (std::size_t entries)
    : table(new std::list<T>[entries][100]) {}

现在,您必须访问的代码table将起作用,但您也可以这样做:

(*table)[i].push_back(something);
于 2012-06-10T00:18:00.053 回答
-1

你是用来做什么[0]的?就够[i]了。

于 2012-06-09T21:28:40.133 回答