我正在尝试用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]和对角线开始。如何在本例中声明并初始化带有数组的函数,然后对角填充?如有任何帮助,我们将不胜感激!
应该是
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的建议使用模板更实用。