如何在c++ 11标准中初始化一个动态大小的数组
How to initialize a dynamically sized array in C++11 standard?
这是我的代码。
int** n;
for (int i = 0; i < N; ++i){
int size;
cin >> size;
int* n[i] = new int[size]; //line 13
for (int j = 0; j < size; ++j){
cin >> n[i][j];
}
}
这是编译过程中弹出的错误。
解决方案。cc:在函数'int main()':
解决方案。Cc:13:33:错误:数组必须用大括号括起来的初始化式
初始化int* n[i] = new int[size];
我意识到这可以使用向量来完成,因为它们在动态处理内存方面要好得多。但我不能在这个挑战中使用矢量。我唯一允许使用的标头是"iostream"
我读到,在c++ 11中,语法已经修改为new:
p = new T [N] {initializer1, ..., initializerN};
来源:https://en.wikipedia.org/wiki/New_and_delete_ (C % 2 b % 2 b)
#概述但是对于类似的变量,我的代码仍然产生相同的错误。
是否有办法完全绕过初始化错误?如果没有,则假设这些值初始化为相同的值。
我认为你没有看到真正的问题。
你声明了一个双指针:
int** n;
如果你忘了为指针数组分配内存,比如:
n = new int*[N]
在为数组的每个指针分配内存之前,这一步是必要的。
此外,我认为你的台词应该是:
n[i] = new int[size]
否则你是在重新声明n+i的类型。
这应该能解决你的问题。
int** n = new int*[N];
for (int i = 0; i < N; ++i){
int size;
cin >> size;
n[i] = new int[size];
for (int j = 0; j < size; ++j){
cin >> n[i][j];
}
}
帮自己一个忙,不要再使用原始指针了。只要有可能,就使用std::vector
来代替原始数组——如下所示:
std::vector<std::vector<int>> n(N);
for (int i = 0; i < N; ++i){
int size;
cin >> size;
n[i].resize(size);
for (int j = 0; j < size; ++j){
cin >> n[i][j];
}
}
相关文章:
- 你能在链表中有一个动态数组和它的内存分配吗
- 从另一个动态链接库项目调用静态库函数
- 指向结构中的数组的指针,其中每个字段都是一个动态数组
- 无法在 CMake 中创建动态库并将其链接到另一个动态库?
- 如何创建一个动态数组,该数组可以保存从C++中派生的同一基类的所有不同对象
- 创建一个动态2D数组来存储类对象
- C++中的特征库有一个动态向量或矩阵吗
- 我需要一个在C 中具有一个动态维度的二维数组
- 在一个动态分配的数组的程序中分割故障
- 创建一个动态数组,包括汽车的年份和品牌,但无法保存我的第一个输出
- 使用 memcpy 将动态数组的内容复制到另一个动态数组上会产生运行时错误
- 在类成员函数中创建一个动态数组
- 当动态创建一个包含另一个动态创建的结构数组的结构数组时,内存管理
- 在C 中,正在将一个动态分配的对象传递给一个函数(总是)一个坏主意
- 在MacOS上编译一个动态库,库搜索路径指向同一目录(CMake)
- 声明一个动态大小数组
- 创建一个动态分配的std::vectors数组
- 从数组中删除多个元素并创建一个动态数组c++
- 如何根据另一个动态库链接动态库
- 返回一个动态数组