将二维数组传递给函数并用数字填充它
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 <array>
或者至少问题中的代码没有这样做。
【参考方案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);
这样,您不需要将数组作为参数传递,因为它是类的一部分。否则,您将不得不像上面建议的那样通过引用传递它。
【讨论】:
以上是关于将二维数组传递给函数并用数字填充它的主要内容,如果未能解决你的问题,请参考以下文章