如何从 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';
}
我需要访问我在堆上分配的数组上的 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';
}