如何用c ++填充c ++中的矩阵?

时间:2018-03-24 23:51:11

标签: c++ c++11 visual-c++ c++14

我有一个大小为bint matrix [a] [b]的矩阵。

{{1}}

我如何填写任何价值?

感谢您回答我的问题。

3 个答案:

答案 0 :(得分:2)

您标记了C ++ 14,因此您可以使用加倍的远程循环

for ( auto & v : matrix )
   for ( auto & e : v )
      e = 42;

在我看来,这是一种简单而优雅的方式来初始化matrix

为了好玩,我向您展示了使用标准算法的方法

std::for_each(std::begin(matrix), std::end(matrix),
   [](auto & v){ std::fill(std::begin(v), std::end(v), 42); });

其他方式也是可能的(例如,参见Vlad的答案中仅std::fill()解决方案),但我发现嵌套的双重更优雅,更易于理解。

请记住,如果你必须初始化为零,你可以简单地写

int matrix [4][2] { };

答案 1 :(得分:0)

嵌套循环以填充或读取多维矩阵:

int matrix [a] [b];

for(int i(0); i != a; ++i)
    for(int j(0); j != b; ++j)
        matrix[i][j] = i * j;

或者用来自用户的输入填充它:

for(int i(0); i != a; ++i)
    for(int j(0); j != b; ++j){
        std::cout << "matrix[" << i << "][" << j <<
            "]: ";
        std::cin >> matrix[i][j];
    }

要打印它:

for(int i(0); i != a; ++i){
    for(int j(0); j != b; ++j)
        std::cout << matrix[i][j] << ", ";
    std::cout << std::endl;
}

答案 2 :(得分:0)

最简单的方法是将二维数组解释为一维数组并应用标准算法std::fill

例如

#include <iostream>
#include <algorithm>

int main() 
{
    const size_t M = 5;
    const size_t N = 10;
    int a[M][N];

    std::cout << "Enter the initializer value: ";
    int value;
    std::cin >> value;

    std::fill( *a, *a + M * N, value );

    for ( const auto &row : a )
    {
        for ( int x : row ) std::cout << x << ' ';
        std::cout << std::endl;
    }


    return 0;
}

程序输出可能看起来像

Enter the initializer value: 10
10 10 10 10 10 10 10 10 10 10 
10 10 10 10 10 10 10 10 10 10 
10 10 10 10 10 10 10 10 10 10 
10 10 10 10 10 10 10 10 10 10 
10 10 10 10 10 10 10 10 10 10