我是编程新手,所以我想编写一个代码,让我输入一个二维数组(在我的例子中是一个矩阵),然后打印它。
#include <iostream>
using namespace std;
void printArray( const int *array, int count )
{
for ( int i = 0; i < count; i++ )
cout << array[ i ] << " ";
cout << endl;
}
int main () {
int n;
cout<<"Please enter the length of your matrix : "<<endl;
cin>>n;
int * y=new int [n];
for (int w = 0; w <= n-1; w++ ) {
y[w] = new int [n];
cout<<"Insert the elements ";
for (int z = 0; z <= n-1; z++)
{
cin >>y [w][z];
}
}
printArray(y, n);
}
但是我收到诸如“从‘int*’到‘int’的无效转换”和“数组下标的无效类型 int[int]”之类的错误。您能否检查我的代码并指出我的缺陷?
谢谢
最佳答案
您声明了 y
作为int*
这只是一维的。您需要声明 y
作为int**
因为它是二维的。
您的代码无法编译的原因是 int* y
指向一个单个内存块(这是一个整数数组,换句话说,一堆int
秒)。 y[w]
是其中之一int
s 在这个数组中所以 y[w] = new int[n]
编译失败,因为您试图分配 int*
到int
.
改变 y
到int**
意味着 y
可以指向 int*
的数组秒。由于每个 int*
可以指向 int
的数组,您将得到一个二维数组。
带有 int**
的 10x10 矩阵的示例代码:
int** iShouldUseStdVector = new int*[10]; // allocate 10 int* <--
for (int i = 0; i < 10; i++)
{
iShouldUseStdVector[i] = new int[10]; // allocate 10 int <--
for (int k = 0; k < 10; k++)
{
iShouldUseStdVector[i][k] = k;
}
}
带有 std::vector
的 10x10 矩阵的示例代码:
std::vector<std::vector<int>> thisIsEasy;
for (int i = 0; i < 10; i++)
{
thisIsEasy.push_back(std::vector<int>());
for (int k = 0; k < 10; k++)
{
thisIsEasy[i].push_back(k);
}
}
我建议使用 std::vector<std::vector<int>> y;
相反,因为它通过在您想要添加更多元素时方便地增长并在其被破坏时释放内存来为您处理内存。
关于c++ - 'int' 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11725844/