我正在从用户那里获取数组大小的输入,然后是它的元素。
在下面的代码中,第一个cin>>A[i]
循环中的for
给了我一个错误。
从与此类似的其他问题来看,这是一个简单的操作错误,而且脚本类似于我所见过的三维工作。 new
默认情况下会创建一个三维数组,这意味着我还需要定义列吗?如果没有,我会在哪里错过运营商?
int** A;
int s;
cin >> s;
A = new int*[s];
for(int i=0;i<s;i++)
{
A[i]=new int[s];
cout<< "Enter value: ";
cin>>A[i];
}
cout<< "Array:\n";
for(int j=0;j<s;j++)
{
cout << A[j] << " ";
}
答案 0 :(得分:1)
int*
是int
指针,而不是operator>>
值。
没有int
可以将int*
值读入int
指针。由于您想要阅读int
值,因此您必须阅读A[i]
变量,因此请将第一个循环中的*A[i]
更改为cin >> *A[i];
:
A[j]
您需要在第二个循环中对cout << *A[j] << " ";
执行相同的操作:
operator<<
这是因为没有int
从int*
指针写入operator<<
值,但是有void*
可以写入内存地址的值由int*
指针持有,void*
可隐式转换为delete[]
。
完成后,不要忘记int s;
cin >> s;
int** A = new int*[s];
for(int i = 0; i < s; ++i)
A[i] = new int[s];
for(int i = 0; i < s; ++i)
{
cout << "Enter value: ";
cin >> *A[i];
}
cout << "Array:\n";
for(int j = 0; j < s; ++j)
cout << *A[j] << " ";
for(int j = 0; j < s; ++j)
delete[] A[j];
delete[] A;
阵列:
s > 1
话虽如此,当int s;
cin >> s;
int* A = new int[s];
for(int i = 0; i < s; ++i)
{
cout << "Enter value: ";
cin >> A[i];
}
cout << "Array:\n";
for(int j = 0; j < s; ++j)
cout << A[j] << " ";
delete[] A;
时,你正在为第二维消耗内存,因为你正在填写并仅使用第一列并忽略其他列。您展示的代码实际上只需要一维数组:
int rows, columns;
cin >> rows;
cin >> columns;
int** A = new int*[rows];
for(int i = 0; i < rows; ++i)
A[i] = new int[columns];
for(int i = 0; i < rows; ++i)
{
for(int j = 0; j < columns; ++j)
{
cout << "Enter value for (" << i << "," << j << "): ";
cin >> A[i][j];
}
}
cout << "Array:\n";
for(int i = 0; i < rows; ++i)
{
for(int j = 0; j < columns; ++j)
cout << A[i][j] << " ";
cout << endl;
}
for(int i = 0; i < rows; ++i)
delete A[i];
delete[] A;
如果您真的想要一个二维数组,请尝试更类似的东西:
std::vector
话虽如此,您确实应该直接使用new[]
代替func drawSpiral(rotations:Double) {
let scale = scaleFactor(rotations) // do some math to figure the best scale
UIGraphicsBeginImageContextWithOptions(mainImageView.bounds.size, false, 0.0)
let context = UIGraphicsGetCurrentContext()!
context.scaleBy(x: scale, y: scale) // some animation prohibits changes!
// ... drawing happens here
myUIImageView.image = UIGraphicsGetImageFromCurrentImageContext()
}
。
答案 1 :(得分:0)
您想要创建什么数组?二维SxS,还是S尺寸? 因为您正在创建一个数组数组,同时尝试以一维方式访问它。
将int** A
更改为int* A
,将A = new int*[s]
更改为A = new int[s]
,并在第一个循环中删除A[i]=new int[s]
,使代码更正。