2017-06-05 142 views
-6

我做了一些指向元素的结构的指针数组。所以在我做了一个表后**我只是将数组中的每个指针设置为空指针,然后再添加元素。现在,当我迭代我不能设置我的end()为空指针,因为然后它将停止迭代在数组中的第一个空指针,它不会找到该空指针后的潜在元素。什么用作end()迭代器C++?

这是我如何创建并填充我的数组中开始与nullptr:

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

我开始迭代器是第一要素*不在表中nullptr。

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

+0

这里没有迭代器...'table ** = new element * [max_sz + 1];' - 无效语法。 – LogicStuff

+0

在非空元素之后的第一个'nullptr'元素看起来很不错。 –

+0

我必须用双指针数组来做:( 什么意思是无效的语法?它工作的很好,迭代器工作正常,直到它到达数组中的第一个nullptr,所以它返回开始和结束之间错误的距离范围 –

回答

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> >),而不是使用原始指针的任何东西。这两者都是为了方便获取迭代器(如果需要)以及其他原因。

+0

哦,我总是创建表max_sz + 1,但我从来没有放任何元素。嗯所以table [max_sz + 1]为我返回什么?它是否是程序中的一些随机内存,肯定没有达到,因此它与最终迭代器一样好?它是未经过创新的元素*?我知道向量会更容易,但任务说我不能使用向量,我必须使用数组指针:(@Peter –

+0

评估'table [max_sz + 1]'的行为给出了未定义的行为。 – Peter