什么用作end()迭代器C ++?

时间:2017-06-05 10:34:57

标签: c++ iterator nullptr

我创建了一个指向一些名为element的结构的指针数组。所以在我制作一个表之后**我只是将数组中的每个指针设置为空指针然后再添加元素。现在,当我迭代时,我无法将我的end()设置为空指针,因为它将停止迭代数组中的第一个空指针,并且它将在该空指针之后找不到潜在的元素。

这就是我在开头使用nullptr创建和填充数组的方法:

table** = new element*[max_sz+1];
for(size_t i = 0; i <= max_sz; i++) table[i] = nullptr;

我的开始迭代器是第一个元素*,它不是表中的nullptr。

那我该怎么设置呢?有任何想法吗 ?

1 个答案:

答案 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> >),而不是涉及原始指针的任何内容。两者都是为了便于获取迭代器,如果需要,以及其他原因。