我创建了一个指向一些名为element的结构的指针数组。所以在我制作一个表之后**我只是将数组中的每个指针设置为空指针然后再添加元素。现在,当我迭代时,我无法将我的end()设置为空指针,因为它将停止迭代数组中的第一个空指针,并且它将在该空指针之后找不到潜在的元素。
这就是我在开头使用nullptr创建和填充数组的方法:
table** = new element*[max_sz+1];
for(size_t i = 0; i <= max_sz; i++) table[i] = nullptr;
我的开始迭代器是第一个元素*,它不是表中的nullptr。
那我该怎么设置呢?有任何想法吗 ?
答案 0 :(得分:2)
table + max_sz +1
将是一个合适的结束迭代器(在某种意义上,迭代器是指针概念的概括)。
例如;
int *begin = table;
int *end = table + max_sz + 1;
for (int *i = begin; i != end; ++i)
{
// whatever
}
该语言的一个规则是指向数组的一个结尾的指针是有效的(只要该指针未被解除引用)。这是真的,但是数组是创建的(例如,作为静态,自动存储持续时间,或动态创建)。
请记住,如果将数组作为参数传递给函数,则将其转换为指针 - 并且需要单独传递长度信息。
最好使用标准容器(例如std::vector<element>
,或者,如果需要动态创建元素,std::vector<std::unique_ptr<element> >
),而不是涉及原始指针的任何内容。两者都是为了便于获取迭代器,如果需要,以及其他原因。