В этой статье блога мы рассмотрим различные методы транспонирования матриц с использованием векторов на языке программирования C++. Транспонирование матрицы предполагает замену ее строк столбцами, в результате чего получается новая матрица с обратными размерами. Мы обсудим различные подходы и приведем примеры кода, которые помогут вам лучше понять концепции.
Метод 1: использование вложенных векторов
Самый простой метод транспонирования матрицы — использование вложенных векторов. Вот пример фрагмента кода:
#include <iostream>
#include <vector>
std::vector<std::vector<int>> transposeMatrix(const std::vector<std::vector<int>>& matrix) {
int rows = matrix.size();
int cols = matrix[0].size();
std::vector<std::vector<int>> transposed(cols, std::vector<int>(rows));
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
transposed[j][i] = matrix[i][j];
}
}
return transposed;
}
int main() {
std::vector<std::vector<int>> matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
std::vector<std::vector<int>> transposedMatrix = transposeMatrix(matrix);
// Output the transposed matrix
for (const auto& row : transposedMatrix) {
for (const auto& element : row) {
std::cout << element << " ";
}
std::cout << "\n";
}
return 0;
}
Метод 2: использование одного вектора
Если вы предпочитаете плоское представление матрицы, вы можете использовать один вектор для хранения транспонированной матрицы. Вот пример:
#include <iostream>
#include <vector>
std::vector<int> transposeMatrix(const std::vector<int>& matrix, int rows, int cols) {
std::vector<int> transposed(cols * rows);
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
transposed[j * rows + i] = matrix[i * cols + j];
}
}
return transposed;
}
int main() {
std::vector<int> matrix = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int rows = 3;
int cols = 3;
std::vector<int> transposedMatrix = transposeMatrix(matrix, rows, cols);
// Output the transposed matrix
for (int i = 0; i < cols; ++i) {
for (int j = 0; j < rows; ++j) {
std::cout << transposedMatrix[i * rows + j] << " ";
}
std::cout << "\n";
}
return 0;
}
Метод 3: использование указателей
Другой эффективный подход предполагает использование указателей для транспонирования матрицы на месте. Этот метод позволяет избежать необходимости в дополнительной памяти. Вот пример:
#include <iostream>
#include <vector>
void transposeMatrix(std::vector<std::vector<int>>& matrix) {
int rows = matrix.size();
int cols = matrix[0].size();
for (int i = 0; i < rows; ++i) {
for (int j = i + 1; j < cols; ++j) {
std::swap(matrix[i][j], matrix[j][i]);
}
}
}
int main() {
std::vector<std::vector<int>> matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
transposeMatrix(matrix);
// Output the transposed matrix
for (const auto& row : matrix) {
for (const auto& element : row) {
std::cout << element << " ";
}
std::cout << "\n";
}
return 0;
}
В этой статье рассмотрено несколько методов транспонирования матриц с использованием векторов в C++. Вы узнали, как использовать вложенные векторы, один вектор и указатели для достижения желаемого результата. Каждый метод имеет свои преимущества и может быть выбран исходя из ваших конкретных требований. Поэкспериментируйте с этими методами, чтобы расширить свои возможности манипулирования матрицами в C++.