嵌套的 for 循环不循环通过第二个数组
Nested for loop not looping through second array
如何让第二个数组正确循环?这是一个简单的矩阵乘法运算(使用 Visual Studio 2019(,arr 正在循环,但 arr2 没有完全循环。只有前 2 个元素乘以 arr 的所有元素。
#include <iostream>
using namespace std;
int main() {
int r1 = 2, c1 = 3, r2 = 3, c2 = 3;
int** arr = new int* [r1];
for (int i = 0; i < c1; i++) {
arr[i] = new int[c1];
}
for (int i = 0; i < r1; i++) {
for (int j = 0; j < c1; j++) {
arr[i][j] = j;
}
}
int** arr2 = new int*[r2];
for (int i = 0; i < c2; i++) {
arr2[i] = new int[c2];
}
for (int i = 0; i < c2; i++) {
for (int j = 0; j < r2; j++) {
arr2[i][j] = j;
}
}
int** arr3 = new int*[r1];
for (int i = 0; i < c2; i++) {
arr3[i] = new int[c2];
}
for (int i = 0; i < r1; i++) {
for (int j = 0; j < c2; j++) {
arr3[i][j] = 0;
}
}
for (int i = 0; i < r1; i++) {
for (int j = 0; j < c2; j++) {
for (int g = 0; g < c1; g++) {
arr3[i][j] += arr[i][g] * arr2[g][j];
cout << "[" << i << "][" << g << "] " << arr[i][g] << "tXt" << "[" << g << "][" << j << "] " << arr2[g][j] << " => " << arr3[i][j] << endl;
}
}
}
cout << "n" << endl;
for (int i = 0; i < r1; i++) {
for (int j = 0; j < c2; j++) {
cout << "New Array Element: [" << i << "][" << j << "] => " << arr3[i][j] << endl;
}
}
return 0;
}
你在所有的循环中都犯了相同的基本错误——这个错误是你没有正确地迭代行。
当应该使用行计数时,您正在使用列计数:
int** arr = new int* [r1];
for (int i = 0; i < c1; i++) { // <-- This should be i < r1, not i < c1;
arr[i] = new int[c1];
}
其次,你可以编写一个函数来减少出错的机会,并且也有更好的机会找到这样的错误:
int **createArray(int rows, int cols)
{
int** arr = new int* [rows];
for (int i = 0; i < rows; i++) {
arr[i] = new int[cols];
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
arr[i][j] = j;
}
}
return arr;
}
int main()
{
int r1 = 2, c1 = 3, r2 = 3, c2 = 3;
int** arr = createArray(r1, c1);
int** arr2 = createArray(r2,c2);
int** arr3 = createArray(r1,c2);
//...
}
现在,创建代码不会一遍又一遍地重复,而且使用错误变量的问题即使没有消除,也会最小化。
话虽如此,这种创建 2D 数组的方式是最糟糕的方法之一。 现在,你的代码有内存泄漏(它仍然被认为是泄漏,即使程序将终止 - 内存工具,如valgrind和其他工具会在程序退出后立即指示错误(。
理想情况下,您将使用容器类(如std::vector<int>
(自动处理动态内存管理。
但即使这是一个必须使用int**
的练习,它仍然是在这些约束下创建二维数组的一种非常糟糕的方法。 这里有一个关于这个问题的答案,为什么它不好,以及如何缓解它。
相关文章:
- 为什么程序运行时我的第二个循环不执行?
- 一个 2D 数组,并按行存储值.第一个循环用于行索引,第二个循环用于列索引
- 当通过tcp接收编码图像的消息时,zmq在第二个循环中崩溃
- 第二个 while 循环未运行,将值设置为 "nan"
- 为什么在我的程序中的第二个循环时,当它在循环之前循环时不起作用
- 如何在我的代码中修复无穷循环?我认为它跳过了第二个CIN,因此它一直在循环
- 如何在C 循环中找到第二个最大数字
- 虽然循环在第二个循环上不起作用
- 为什么第一个循环的剂量总是比第二个循环快
- 嵌套如果循环跳到第二个,即使第一个不为真
- 为什么我的程序在循环时不会重新进入第二个?C
- 为什么 for 循环没有达到循环的第二个条件中设置的数字
- 无法获得第二个正确循环
- C++字符串流如何在第二个循环中重置它
- 第二个无效响应在我的验证循环中被接受
- 而循环在第二个用户输入C++后停止工作
- 如何在for循环中声明第二个迭代器
- 我的 for 循环第一次正确输入,但第二次不正确,并显示第二个输入的输出。我不明白为什么会这样。
- For循环多个变量,第二个变量不更新
- 程序忽略第二个循环