如何从 int* 类型的堆分配数组中检索 int[num_elem] 类型的变量?

How can I retrieve a variable of type int[num_elem] from a heap-allocated array of type int*?

我需要访问我在堆上分配的数组上的 end() 和 begin() 等迭代器,如下所示:

int* init_env_heap = new int[NUM_ELEM];

它的类型为 int* 并且迭代器不会立即为它工作。

然而,当我在堆栈上分配它时,类型是 int[NUM_ELEM] 并且迭代器工作:

int init_env_stack[NUM_ELEM] = { };

如何在 init_env_heap 上使用迭代器?

关于迭代器的事情是它们模拟指针。堆分配区域的开始是指向第一个元素的指针。结尾是开头加上大小。

你只要想到几件事就很容易记住:

  • "beginning iterator"始终是指向第一个元素的指针
  • "end iterator" 总是指向最后一个元素之后的元素
  • 对于任何有效指针 p 和索引 i,表达式 p + i 等于 &p[i]

在您的例子中,第一个元素由 init_env_heap 指向,指向最后一个元素之后的指针是 &init_env_heap[NUM_ELEM],等于 init_env_heap + NUM_ELEM.

指针已经符合迭代器的概念。例如,

#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';


}