如何在 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];
}
}
这是编译时弹出的错误
solution.cc: In function 'int main()':
solution.cc:13:33: error: array must be initialized with a brace-enclosed initializer
int* n[i] = new int[size];
我意识到这可以使用向量来完成,因为它们在动态处理内存方面要好得多。但是我不允许使用向量来应对这个挑战。我唯一可以使用的 header 是“iostream”。
我读到,在 C++11 中,语法已修改为新的:
p = new T [N] {initializer1, ..., initializerN};
来源:https://en.wikipedia.org/wiki/New_and_delete_(C%2B%2B)#Overview
但是我的代码对于类似的变体仍然产生相同的错误。
有没有办法完全绕过初始化错误?如果不是,则假设这些值最好初始化为相同的值。
帮自己一个忙,停止使用原始指针。尽可能使用 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];
}
}
我相信(恕我直言)您没有关注真正的问题。
你声明了一个双指针:
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];
}
}
这是我的一段代码。
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];
}
}
这是编译时弹出的错误
solution.cc: In function 'int main()':
solution.cc:13:33: error: array must be initialized with a brace-enclosed initializer
int* n[i] = new int[size];
我意识到这可以使用向量来完成,因为它们在动态处理内存方面要好得多。但是我不允许使用向量来应对这个挑战。我唯一可以使用的 header 是“iostream”。
我读到,在 C++11 中,语法已修改为新的:
p = new T [N] {initializer1, ..., initializerN};
来源:https://en.wikipedia.org/wiki/New_and_delete_(C%2B%2B)#Overview
但是我的代码对于类似的变体仍然产生相同的错误。
有没有办法完全绕过初始化错误?如果不是,则假设这些值最好初始化为相同的值。
帮自己一个忙,停止使用原始指针。尽可能使用 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];
}
}
我相信(恕我直言)您没有关注真正的问题。
你声明了一个双指针:
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];
}
}