2017-07-30 54 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

相关问题