使用向量的矩陣

通過將向量定義為向量向量,向量可以用作 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;
    }
}

向量向量是表示矩陣的便捷方式,但它並不是最有效的:單個向量分散在記憶體中,資料結構不是快取友好的。

此外,在適當的矩陣中,每行的長度必須相同(對於向量向量不是這種情況)。額外的靈活性可能是錯誤的根源。