微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将二维数组传递给函数并用数字填充它

如何解决将二维数组传递给函数并用数字填充它

我正在尝试用 C++ 完成任务。我需要创建这个函数

void fillArray(std::array<std::array<int,maxColumns>,maxRows> array,size_t rows,size_t columns) {

}

现在我的示例代码如下所示:

#include <iostream>
#include <array>
constexpr int maxColumns = 42;
constexpr int maxRows = 334;

void fillArray(std::array<std::array<int,size_t columns) {

}


int main()
{
    
}

我需要用从 1 到行*列的数字填充数组,从 [0][0] 和对角线开始。本例中如何用数组声明和初始化函数,然后对角填充?任何帮助将不胜感激!

解决方法

应该是

template <std::size_t maxColumns,std::size_t maxRows>
void fillArray(std::array<std::array<int,maxColumns>,maxRows>& array) {
// ...
}

Demo

,

假设您使用一个简单的一维 valarray(或数组,如果您坚持),其大小 width * height 包裹在一个类中:

class Matrix
{
private:
    std::valarray<int> _data;
    int _width,_height;

public:
    Matrix(int width,int height) : _width(width),_height(height),_data(width * height)
    {
    }
}

然后你可以添加一个成员函数,将 x、y 坐标映射到一个项目引用:

int& item(int x,int y) { return _data[x + _width * y]; }

... 和另一个像这样对角填充它:

void fillDiagonally(int value = 0,int step = 1)
{
    for (int i = 0; i < _height + _width; ++i) {
        // calculate starting coordinates (along left edge and then bottom edge)
        int row = i < _height ? i : _height - 1;
        int col = i < _height ? 0 : i - _height + 1;
        // move diagonally up and right until you reach margins,while filling-in values
        for (int j = 0; j < _width - col && j <= row; ++j) {
            item(col + j,row - j) = value;
            value += step;
        }
    }
}

并像这样使用它:

int main()
{
    Matrix m(8,5);
    m.fillDiagonally(1);
}

这样,您不需要将数组作为参数传递,因为它是类的一部分。否则,您将不得不通过引用传递它,就像上面建议的那样。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。