2017-06-05 145 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