题解 | 矩阵转置

矩阵转置

https://www.nowcoder.com/practice/351b3d03e410496ab5a407b7ca3fd841

#include <iostream>
#include <vector>
#include <stdexcept>

// 命名空间隔离:避免全局命名污染
namespace MatrixOperation {

/**
 * @brief 矩阵转置函数(n行m列 → m行n列)
 * @param n 原矩阵行数
 * @param m 原矩阵列数
 * @return 转置后的矩阵
 */
std::vector<std::vector<int>> TransposeMatrix(size_t n, size_t m) {
    std::vector<std::vector<int>> transposed(m); // 先初始化外层(m行),内层按需扩容
    int element;

    for (size_t i = 0; i < n; ++i) {
        for (size_t j = 0; j < m; ++j) {
            if (!(std::cin >> element)) {
                throw std::runtime_error(
                    "Invalid element input at row=" + std::to_string(i) + ", col=" + std::to_string(
                        j)
                );
            }
            transposed[j].push_back(element); // 列优先赋值,内层按需push_back
        }
    }
    return transposed;
}

} // namespace MatrixOperation

int main() {
    // IO加速:适配大数据量输入
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    size_t n, m;
    try {
        // 校验矩阵行列数合法性
        if (!(std::cin >> n >> m) || n < 1 || m < 1) {
            throw std::invalid_argument("Matrix size (n,m) must be positive integers");
        }

        // 调用转置函数(异常由函数抛出,统一捕获)
        auto transposed_matrix = MatrixOperation::TransposeMatrix(n, m);

        // 输出转置矩阵(解决末尾空格问题)
        for (const auto& row : transposed_matrix) {
            if (row.empty()) continue;
            // 先输出第一个元素,再输出“空格+元素”,避免末尾空格
            std::cout << row[0];
            for (size_t k = 1; k < row.size(); ++k) {
                std::cout << " " << row[k];
            }
            std::cout << std::endl;
        }

    } catch (const std::exception& e) {
        // 统一异常处理:输出错误信息,异常退出返回1
        std::cerr << "Error: " << e.what() << std::endl;
        return 1;
    }

    // 正常退出返回0
    return 0;
}

优化版

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务