为什么范围基本循环不适用于堆中的数组,但适用于堆栈中的数组
why range base loop doesn't work for arrays in heap, but works for the arrays in stack
这里我试图为两个整数数组使用c++11范围基循环。一个使用new关键字声明,另一个不使用。
#include <iostream>
#include <stdlib.h>
#define ARRAY_LENGTH 100
int main()
{
int* heap_array = new int[ARRAY_LENGTH];
int stack_aray[ARRAY_LENGTH];
for(int i=0; i < ARRAY_LENGTH; i++)
{
int val = (rand() % ARRAY_LENGTH) + 1;
heap_array[i] = val;
stack_array[i] = val;
}
for(int& i : stack_array){ std::cout << i << std::endl;}
for(int& i : *heap_array){ std::cout << i << std::endl;} // compile error
delete[] heap_array;
return 0;
}
为什么范围基循环不适用于用new关键字声明的数组?我的观点是堆或堆栈都是heap_array
&CCD_ 2是指向第一个元素的指针。
您的heap_array
实际上不是一个数组,而是指向int
的原始指针。原始指针对所分配的元素数量一无所知。
相关文章:
- 并行用于C++17中数组索引范围内的循环
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 迭代器库中的 std::size() 不适用于传递给函数的 C 样式数组
- 自定义 STL 兼容迭代器,用于迭代 2D 数组类的列
- 用于查找数组中最大元素的出现次数的代码,给出分段错误
- 用于 progmem 的C++和头文件压缩的 Web 文件字节数组
- C++ 函数,用于查找数组中四个最小最大元素的总和不起作用
- C++ 用于在数组中打印字符串的随机数
- 重载运算符 [] 用于从对象数组中给出特定索引
- 快速排序不适用于大型数组
- 将基本类型数组中的内存重新用于不同(但仍然是基本)类型的数组合法吗
- 元组适用于 nullptr,但不适用于 NULL
- const 数组,用于在数组长度定义中使用其元素或为模板参数提供值
- 输入/矢量数组不适用于发送输入
- 函数指针数组的类模板参数推导适用于 clang,但不适用于 gcc
- 什么是快速矩阵或二维数组,用于在C++中存储邻接矩阵
- C++帮助.数组不适用于整数
- 动态 3D 数组不适用于我的类(使用向量会更好吗?