gpt4 book ai didi

c++ - 如何使用断言对数组进行测试?

转载 作者:搜寻专家 更新时间:2023-10-31 01:26:00 26 4
gpt4 key购买 nike

我正在尝试为将矩阵 AX 的乘积添加到矩阵 Y 的程序编写测试。但是我得到了错误:

"Identifier is required"

我无法解决或找不到解决这个问题的方法,所以我在这里寻求帮助。

起初,我认为问题是我将它与错误的数组进行比较。然后我试图通过其他论点。将我的代码分解为几个函数。但是,仍然没有任何反应。

#include<iostream>
#include<cassert>

using namespace std;

void axpy(int n, int m, int k, int **A, int **X, int **Y)
{
int i, j, q;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
for (q = 0; q < k; q++)
{
Y[i][j] += A[i][q] * X[q][j];
}
}
}
cout << "Product of matrices\n";
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
cout << Y[i][j] << " ";
cout << "\n";
}
}

void TestAxpy()
{
int P[2][2] = { {13,11},{27,21} };
assert(axpy(2,2,2,[1,2][3,4],[4,3][2,1],[5,6][7,8]) == P);
}

int main()
{
int n, m, k, i, j, q;

cout << "Enter number of rows of matrix X and columns of matrix A: ";
cin >> k;
cout << "Enter number of rows of matrix A and Y: ";
cin >> n;
cout << "Enter number of columns of matrix X and Y: ";
cin >> m;

int **A = new int *[k];

for (i = 0; i < k; i++)
A[i] = new int[n];

int **X = new int *[m];

for (i = 0; i < m; i++)
X[i] = new int[k];

int **Y = new int *[m];

for (i = 0; i < m; i++)
Y[i] = new int[n];


cout << "Enter elements of matrix A: ";
for (i = 0; i < n; i++)
for (j = 0; j < k; j++)
cin >> A[i][j];
cout << "Enter elements of matrix X: ";
for (i = 0; i < k; i++)
for (j = 0; j < m; j++)
cin >> X[i][j];
cout << "Enter elements of matrix Y: ";
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
cin >> Y[i][j];
axpy(n, m, k, A, X, Y);
TestAxpy();
system("pause");
return 0;
}

我想用 [13, 11] [27 21] 的结果得到一个 2x2 矩阵。我使用的输入例如:

Enter number of rows of matrix X and columns of matrix A: 2
Enter number of rows of matrix A and Y: 2
Enter number of columns of matrix X and Y: 2
Enter elements of matrix A: 1 2 3 4
Enter elements of matrix X: 4 3 2 1
Enter elements of matrix Y: 5 6 7 8

最佳答案

这似乎是 C 和 C++ 的混合体。在 C++ 中,很少需要使用原始“C”数组,几乎总是 std::vector<>std::array<>会是更好的选择。 boost 库中还有一个矩阵,可以准确存储您需要的内容。

就您的具体代码而言,存在两个问题:

  1. 指向指针 (**) 的指针与二维数组不同。它们是两层间接寻址。第一个是指向内存中将第二层存储在内存中的位置的指针。请参阅下面的内容,了解它需要如何工作才能调用 axpy。 再次强烈建议查看 std::vector 或 boost 库。
  2. “==”运算符不适用于 C 数组。您需要指定希望如何进行比较。如所写,它充其量只是比较内存地址,但更有可能产生错误。
void TestAxpy()
{
int P[2][2] = { {13,11},{27,21} };
int A1[2] = {1,2};
int A2[2] = {3,4};
int* A[2] = { A1, A2 };

int X1[2] = {4,3};
int X2[2] = {2,1};
int *X[2] = { X1, X2 };

int Y1[2];
int Y2[2];
int *Y[2] = {Y1, Y2 };

axpy(2,2,2,A,X,Y);
//assert(Y == P); //C++ doesn't know how to do this.
}

关于c++ - 如何使用断言对数组进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55987915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com