arrays - c++中二维数组的声明冲突?
问题描述
我遇到了一个需要动态声明二维数组的问题。行数是已知的(即 2),而列数将作为输入。
我使用了这种技术:
cin>>size;
int **outer = new int*[2];
int outer[0] = new int[size];
int outer [1] = new int[size];
但这给出了一个错误:冲突声明'int external [0]'
比我通过将代码更改为来解决问题:
cin>>size; // size of the column
int **outer = new int*[2];
for(int i=0;i<2;i++)
outer[i] = new int[size];
所以,我想知道为什么我不能像第一个那样声明二维数组,因为我在声明并定义了大小之后才声明它。
解决方案
和
int outer[0] = ...;
您将一个名为 的全新变量定义outer
为一个零元素数组。
简单的分配似乎是你想要的:
outer[0] = new int[size];
outer[1] = new int[size];
而且我真的建议您不要使用自己的手动内存和指针处理。第一个解决方法是意识到它outer
不需要是指针而是数组,如
int* outer[2] = {
new int[size],
new int[size]
};
然后完全消除指针使用std::vector
你可以做到这一点
std::vector<int> outer[2] = {
std::vector<int>(size),
std::vector<int>(size)
};
您还应该考虑将 C 样式数组替换为std::array
:
std::array<std::vector<int>, 2> outer = {
std::vector<int>(size),
std::vector<int>(size)
};
推荐阅读
- java - Java:如何从 java 应用程序在 linux 中的 usr 下创建目录?
- mapbox - 下载 MapBox 离线地图并将其存储在内部存储中
- linq - 我在使 Powershell Linq“加入”工作时遇到问题 [显式参数输入?]
- flutter - 在 Flutter Widget 测试中,如何将 media.orientation 设置为纵向?
- html - HTML - 通过显示无隐藏和取消隐藏 div
- php - 删除字符串中的两个第一个单词和第一个单词(标题wordpress)
- android - 没有为生产构建生成 FCM 令牌
- c# - Active Directory:调整功能的性能以检索组成员
- visual-studio - 带有一列的 MVC 列表以显示图像
- r - 使用 Mutate 对特定列进行排名