2017-07-30 60 views

回答

2

關於迭代器的一點是它們模擬指針。堆分配區的開始處是指向第一個元素的指針。結尾是開始加上大小。

它會很容易記住的是,你只是覺得一對夫婦的事情:

  • 的「開始的迭代器」始終是一個指向第一個元素
  • 「結束迭代器」總是指向超出最後一個元素
  • 對於任何有效指針p和索引i,表達式p + i等於&p[i]

在你的情況下,第一元件被指向​​,和一個指針到一個超出最後元件是&init_env_heap[NUM_ELEM],其等於init_env_heap + NUM_ELEM

+0

感謝您提醒我有關指針算術。重構我的代碼會很痛苦,因爲迭代器隱含的增強了循環。那些將不得不改爲systemcpro的循環,看起來像。這就是爲什麼我希望從int *到int [elem]的轉換(代碼中只有一個地方需要更改) –

1

指針已經符合迭代器的概念。例如,

#include <iostream> 

int main(int, char**){ 

    constexpr int SIZE = 5; 
    int values[SIZE] = {1,2,3,4,5}; 
    int* start = values; 
    int* end = values + SIZE; 
    for(int* iter = values; iter < end; ++iter) 
     std::cout << "value: " << *iter << '\n'; 


} 
+0

它們的工作方式與正常迭代器完全一樣。 – systemcpro

+0

感謝您展示如何遍歷這些值。正如我在對其他答案的評論中指出的那樣,我目前使用增強型for循環。我想我必須將它們更改爲您在此處顯示的for-loop格式。似乎沒有辦法從我可用的int *類型中暴露通常的int [size]類型。 –

+0

@WuschelbeutelKartoffelhuhn - 你不必重構。編寫一個提供數組「視圖」的小工具,並有一個返回這些指針的「begin」和「end」成員。 – StoryTeller

相關問題