21xrx.com
2024-12-22 22:37:01 Sunday
登录
文章检索 我的文章 写文章
C++中Matrix(矩阵)转化为Vector(向量)教程
2023-07-04 06:14:29 深夜i     --     --
C++ Matrix(矩阵) Vector(向量) 转化 教程

在算法和计算机科学的领域中,矩阵和向量是必不可少的工具。其中,矩阵是一个二维数组,而向量则是一个一维数组。在C++中,Matrix和Vector都是由数组来实现的。本文将介绍如何将Matrix转化为Vector,并提供一些示例代码。

首先,我们需要将Matrix的元素逐个取出,并按照行优先或者列优先的顺序存储到Vector中。行优先指的是将Matrix中每一行的元素按照先后顺序依次存入Vector中,而列优先则是将Matrix中每一列的元素按照先后顺序依次存入Vector中。以下是行优先转化的C++代码:


std::vector<int> matrix_to_vector_row_major(const std::vector<std::vector<int>>& matrix) {

  std::vector<int> vec;

  for (const auto& row : matrix) {

    for (const auto& elem : row) {

      vec.emplace_back(elem);

    }

  }

  return vec;

}

同样地,以下是列优先转化的C++代码:


std::vector<int> matrix_to_vector_col_major(const std::vector<std::vector<int>>& matrix) {

  const int M = matrix.size();

  const int N = matrix[0].size();

  std::vector<int> vec(M * N);

  for (int j = 0; j < N; ++j) {

    for (int i = 0; i < M; ++i) {

      vec[i * N + j] = matrix[i][j];

    }

  }

  return vec;

}

接下来,我们将使用这些函数对一个二维矩阵进行转化。我们首先定义一个二维矩阵,并将其转化为行优先存储的Vector:


std::vector<std::vector<int>> matrix = { 2, 6, 8};

std::vector<int> vector_row_major = matrix_to_vector_row_major(matrix);

最终,vector_row_major的值应该是[1, 2, 3, 4, 5, 6, 7, 8, 9]。接下来我们将利用列优先的方式再次进行转化:


std::vector<int> vector_col_major = matrix_to_vector_col_major(matrix)

最终,vector_col_major的值应该是[1, 4, 7, 2, 5, 8, 3, 6, 9]。

转化Matrix到Vector是一个非常常见的操作,并且非常有用。在这篇文章中,我们提供了两个转化Matrix到Vector的函数,并演示了如何在C++中使用它们。但是,需要注意的是,如果Matrix的大小非常大,这个操作依然可能会需要花费大量的时间和内存,因此需要谨慎使用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复