使用向量的矩阵

通过将矢量定义为矢量矢量,矢量可以用作 2D 矩阵。

具有 3 行和 4 列的矩阵,每个单元初始化为 0,可以定义为:

std::vector<std::vector<int> > matrix(3, std::vector<int>(4));

Version >= C++ 11

使用初始化列表或其他方式初始化它们的语法类似于法线向量的语法。

  std::vector<std::vector<int>> matrix = { {0,1,2,3},
                                           {4,5,6,7}, 
                                           {8,9,10,11}
                                         };

可以类似于 2D 阵列访问这种矢量中的值

int var = matrix[0][2];

迭代整个矩阵类似于法向量但具有额外维度。

for(int i = 0; i < 3; ++i)
{
    for(int j = 0; j < 4; ++j)
    {
        std::cout << matrix[i][j] << std::endl;
    }
}

Version >= C++ 11

for(auto& row: matrix)
{
    for(auto& col : row)
    { 
        std::cout << col << std::endl;
    }
}

向量向量是表示矩阵的便捷方式,但它并不是最有效的:单个向量分散在内存中,数据结构不是缓存友好的。

此外,在适当的矩阵中,每行的长度必须相同(对于矢量矢量不是这种情况)。额外的灵活性可能是错误的根源。