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

Posted

技术标签:

【中文标题】将二维数组传递给函数并用数字填充它【英文标题】:Passing 2D array into function and filling it with numbers 【发布时间】:2021-03-22 14:12:29 【问题描述】:

我正在尝试用 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, maxColumns>, maxRows> array, size_t rows, size_t columns) 




int main()

    

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

【问题讨论】:

您遇到什么错误?请将它们复制并粘贴到您的问题中。 阅读通过引用传递(与通过值传递)。如果您需要代码方面的帮助,请在问题中包含minimal reproducible example 和编译器错误消息 Add required things. 好的,我稍微改了一下问题。 您可能忘记了:#include &lt;array&gt; 或者至少问题中的代码没有这样做。 【参考方案1】:

应该是

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

Demo

【讨论】:

除非 OP 想要一个 100x100 的数组并且只填充 10x10。 但是如何将数组传递给这个函数呢?我只是简单地做 fillArray(array) 还是需要以其他方式声明它?【参考方案2】:

假设您使用一个简单的一维 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);

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

【讨论】:

以上是关于将二维数组传递给函数并用数字填充它的主要内容,如果未能解决你的问题,请参考以下文章

如何将二维数组作为 multiprocessing.Array 传递给 multiprocessing.Pool?

JNI维数组:将二维数组从java传递给c

VBA:将二维数组传递给集合函数[重复]

如何将 C# 中的二维数组传递给 C++ DLL?

从工作表将二维数组传递给 VBA/UDF 函数

C在函数中传递二维数组会给我分段错误