当前位置: 首页 > 知识库问答 >
问题:

将二维数组导入函数并填充数字

东门胤
2023-03-14

我正在尝试用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()
{
    
}

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

共有2个答案

岳研
2023-03-14

如何在本例中对角填充数组?

假设tou想用某个值填充对角线,比方说5,数组的其余部分用0,你可以这样做:

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

    for(int i = 0; i < maxRows; i++){
        for (int j = 0; j < maxColumns; j++){
            if(i == j){
                a[i][j] = 5;
            }
            else{
                a[i][j] = 0;
            }
        }
    }
}

int main()
{
    std::array<std::array<int, 10>, 10> a;

    fillArray(a);

    for(auto& i : a){ // test print
        for(auto j : i){
            std:: cout << j << " ";
        }
        std::cout << "\n";
    }
}

输出:

5 0 0 0 0 0 0 0 0 0
0 5 0 0 0 0 0 0 0 0
0 0 5 0 0 0 0 0 0 0
0 0 0 5 0 0 0 0 0 0
0 0 0 0 5 0 0 0 0 0
0 0 0 0 0 5 0 0 0 0
0 0 0 0 0 0 5 0 0 0
0 0 0 0 0 0 0 5 0 0
0 0 0 0 0 0 0 0 5 0
0 0 0 0 0 0 0 0 0 5

您可以用您原来的函数来做,但是按照Jarod的建议使用模板更实用。

全彬
2023-03-14

应该是

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

演示

 类似资料:
  • 我对Javafx不熟悉,想知道如何从2维字符串数组填充桌面视图: 会非常感激你的回应。

  • 到目前为止,这就是我得到的,但我不太确定接下来该怎么办。我(认为)这里发生的是,它到达数组的第一个位置,在0,0处,并生成一个数字。然后转到1,1和2,2,依此类推。我不确定该从那里开始,我相信有一种更有效的方法可以一次填充整行或整列。 此外,我的编译器不允许我像平时一样使用cout或endl?它坚持我使用std::cout,我只是想知道为什么。

  • 问题内容: 嗨,我正在尝试根据用户输入自动填充2d数组。用户将输入1个数字,该数字将设置2d数组的大小。然后,我想打印出数组的数字。例如,如果用户输入数字4。2d数组将是4行乘4列,并且应包含数字1到16,并打印如下。 但是,我正在努力思考正确的声明来做到这一点。目前,我的代码只是打印出包含*的2d数组。 有谁知道我如何打印数字的任何想法,我真的被卡住了。我的代码如下: 问题答案: 读取n值,

  • 您知道如何用流中的单词填充数组吗?这是我目前所能做到的: 所以它看起来像{{1,2,3},{4,5,6},{7,8,9},…}

  • 问题内容: 我是Java 8的新手,目前无法完全掌握Streams,是否可以使用Stream功能操作填充数组?这是我如何使用标准的for循环来实现的示例代码: 如果有可能,我将如何使用Stream?如果可能,是否方便(性能和可读性明智)? 问题答案: 在这里,您有一个解决方案,它生成数组而不是修改先前定义的变量: 如果要使用并行流,那么避免诸如修改变量(数组或对象)之类的副作用非常重要。这可能会导

  • 你有时能看到用另一种不同的接口(不同参数和返回值)实现addTime这样的函数。addTime函数不是在每次调用时都创建一个新对象,而是要求调用者提供一个“空对象”用以存储其结果。请将下述代码和之前版本做比较: void addTimeFill (const Time& t1, const Time& t2, Time& sum) { sum.hour = t1.hour + t2.hou