首页 > 解决方案 > 在c ++中将两个不同维度的数组相乘

问题描述

对于我的任务,我必须将两个矩阵相乘以创建一个新矩阵。然后,我将从继承的类中对新的进行排序。我的问题是将两个不同维度的数组相乘的格式是什么,我的第一个数组a1d是 5 个整数。我的另一个a2d是 5x10 阵列。将它们相乘的正确方法是什么,因为它们的大小和尺寸不同。我是否将 a1d 乘以 a2d 的每一行?我要将产品输出到一维数组,以便排序更容易。我已将这两个数组绘制为表格以帮助我将其可视化。我将附上我的短代码和我的插图。这是在 C++ 中。

#pragma once
#include<ctime>
#include<iostream>
#include<cmath>
using namespace std;
class matrices
{
private:
    int* a1d[5]; // Old Code:int* a1d = new int[5];
    int** a2d = new int* [5];
public:
    int* matrix;
    matrices();
    ~matrices();
    int* filla1d();
    int* filla2d();
    int* multiply();
};

int* matrices::filla1d() {

    for (int i = 0; i < 5; i++) {
        a1d[i] = new int;
    }
    for (int i = 0; i < 5; i++) {
        *a1d[i] = rand() % 10 + 1;
    }

    return *a1d;
}


int* matrices::filla2d() {

    for (int i = 0; i < 5; i++) {
        a2d[i] = new int[10];
    }

    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 10; j++) {
            a2d[i][j] = rand() % 10 + 1;
            cout << a2d[i][j] << endl;
        }
    }
    return *a2d;
}



int* matrices::multiply() {


}

要求我只使用指针类型变量和指针返回函数,尽管这并没有太大变化。我不知道它们应该如何相乘,因此,我不确定新数组大小的乘法会生成多少个值。提前致谢!

这是我设计的将它们相乘的方法。我改变了我的指针数组的分配方式。我现在的问题是它告诉我“表达式必须具有算术或无范围枚举类型”。我matrix[i] =(a1d[index1] * a2d[index1][index2]);认为 a1d 可能需要是指针类型,但它给了我无法从 int* 转换为 int 的错误。

此外,当我调试时,我的a1dmatrix数组完美分配并在鼠标悬停时显示正确数量的数据槽。但是,a2d在这种情况下,只显示一个指向 5 的指针。我按照我在网上看到的指针数组的语法来创建一个二维数组。

int* matrices::filla1d() {
    for (int i = 0; i < 5; i++) {
        a1d[i] = new int;
    }
    for (int i = 0; i < 5; i++) {
        *a1d[i] = rand() % 10 + 1;
    }

    return *a1d;
}


int* matrices::filla2d() {

    for (int i = 0; i < 5; i++) {
        a2d[i] = new int[10];
    }

    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 10; j++) {
            a2d[i][j] = rand() % 10 + 1;
        }
    }
    return *a2d;
}



int* matrices::multiply() {

    for (int i = 0; i < 50; i++) {
        matrix[i] = new int;
    }
    int index1 = 0;
    int index2 = 0;
    for (int i = 0; i < 50; i++) {
        matrix[i] = (a1d[index1] * a2d[index1][index2]);
        index1++;
        index2++;
    }

    return *matrix;
}
class matrices
{
private:
    int* a1d[5];
    int** a2d = new int*[5];
public:
    int* matrix[50];
    matrices();
    ~matrices();
    int* filla1d();
    int* filla2d();
    int* multiply();
};

编辑2:

我更改了行以填充新matrix的说 *matrix[i] = a2d[index1][index2] * *a1d[index1]; 现在我在此行上收到访问冲突错误。我matrix分配的方式与分配方式相同a1d,什么会导致我的访问冲突?

标签: c++arrayspointers

解决方案


推荐阅读