【发布时间】:2017-06-05 10:34:56
【问题描述】:
我创建了一个指向某个称为元素的结构的指针数组。因此,在我制作表格后** 我只需将数组中的每个指针设置为空指针,然后再添加元素。现在,当我迭代时,我无法将 end() 设置为空指针,因为这样它将在数组中的第一个空指针处停止迭代,并且在该空指针之后找不到潜在元素。
这就是我在开头使用 nullptr 创建和填充数组的方式:
table** = new element*[max_sz+1];
for(size_t i = 0; i <= max_sz; i++) table[i] = nullptr;
我的开始迭代器是第一个元素*,它不是表中的 nullptr。
那么我应该把它设置成什么?有任何想法吗 ?
【问题讨论】:
-
这里没有迭代器...
table** = new element*[max_sz+1];- 语法无效。 -
非空元素之后的第一个
nullptr元素似乎是一个不错的候选者。 -
你有用双指针数组来做?!为什么不改为
std::vector<std::unique_ptr<element>>?您可以获得 RAII 和可为空的元素,而不会混淆end()。 -
那么你必须遍历整个数组才能找到所有非空元素。这意味着(使用您当前的代码)“结束迭代器”是
table + max_sz + 1。 -
@MilosJovanovic 对我和我的编译器来说似乎也是无效的语法:coliru.stacked-crooked.com/a/fd05d3e78fc3f723