C++:使用指向数组的指针
C++: Work with a pointer to an array
我正在努力解决声明、创建和操作指向列表对象数组的指针所需的语法。我正在为课程作业创建一个哈希表模板类,使用链接来处理冲突。
我的哈希表应该是list
对象的数组。 std::list
是我唯一被允许用于赋值的标准库数据类,所以 vector 被淘汰了。
我的问题是:如何声明指向 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);
}
}
不知何故,表[0][i]似乎对访问table
指向的数组单元格是错误的。它应该是什么样子的?
因为table
是一个std::list*
,table[i][j]
表示(table + i)->operator[](j)
;也就是说,它从地址table + i
开始在std::list
对象上调用一个成员函数(带有参数j
)。
因此,由于std::list
不会重载[]
,因此table[0][i].empty()
是错误的(如果std::list<T>
中的T
是这样的,则双重错误,以至于它没有成员函数empty
)。
简而言之,我认为您需要的是一个简单的table[list_index_on_array].empty()
来检查空虚。
其他一切看起来都不错。
如果类 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);
你用[0]
做什么?只要[i]
就足够了。
相关文章:
- 添加到数组指针
- C++语法差异:二维和一维数组(指针算术)
- 数组指针表示法C++(移动数组时)
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++访问指向结构的指针中的类数组指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 创建<int>对整数数组指针的矢量引用 (C++)
- 将 2D 数组指针传递给 C++ 中的函数
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 队列数组指针 (C++)
- C++数组指针上的删除操作
- 对于循环不循环和检测字符数组 [指针和字符数组]
- 如何初始化数组指针对象
- 如何正确传递 2D 数组指针作为参数
- 从数组指针中获取怪异的数字
- 初始化std :: unique_ptr作为原始数组指针的初始化
- 将结构数组指针从C#传递到C
- STD :: Sort将数组指针设置为NULL
- C++数组指针错误无法将“int*”转换为“int**”