容器基本设置
我已经实现了一个简单的自定义无序集容器,它使用散列。在内部,它存储如下数据:
class Set
{
T *data = nullptr;
bool *emptyList = nullptr;
int size = 0;
... (inner methos go here)
};
也就是说,它存储了两个数组。一个data
使用模板化类型的实际值T
调用,另一个emptyList
使用bool
标记该位置的集合是否被视为空的值调用。
这样,线性探测以存储新值并擦除条目变得更便宜。两者都分别成为寻找下一个emptyList[index] = true
或将其设置为 的问题true
。
范围 for 循环的问题
for(auto i : set_instance)
目前,我允许通过在集合类中具有以下公共成员函数来迭代存储在集合中的值:
T* begin() const { data[0] };
T* end() const { data[end] };
当然,问题在于范围 for 循环也访问data
不应访问的条目,因为它们被标记emptyList
为空。
有没有办法让我这样做,以便当用户尝试使用范围循环迭代集合时,只有其中的条目data
对应于emptyList
未标记为实际由范围循环访问/处理的条目?true