提问者:小点点

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


我正在尝试用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个答案

匿名用户

应该是

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

演示

匿名用户

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

假设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的建议使用模板更实用。