首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 使用 cin 讀取矩陣並存入 vector<vector<int>>:按行解析的標準寫法

     編輯:程式設計綜合問答

輸入格式假設

1 2 3
4 5 6

每行一個向量,空格分隔,行數不固定,以 EOF 結束 (Ctrl+Z / Ctrl+D)。

標準實現:getline + stringstream

#include <iostream>
#include <sstream>
#include <vector>
#include <string>

using namespace std;

void readMatrix(vector<vector<int>>& matrix)
{
    string line;
    while (getline(cin, line))           // 讀整行
    {
        if (line.empty()) continue;      // 跳過空行
        stringstream ss(line);
        vector<int> row;
        int val;
        while (ss >> val)                // 按空格解析整數
            row.push_back(val);
        if (!row.empty())
            matrix.push_back(move(row)); // 移動語義避免拷貝
    }
}

int main()
{
    vector<vector<int>> mat;
    readMatrix(mat);
    
    // 輸出驗證
    for (const auto& row : mat) {
        for (int v : row) cout << v << ' ';
        cout << '\n';
    }
    return 0;
}

關鍵點解析

技術點作用
getline(cin, line)按行讀取,保留行邊界
stringstream ss(line)將行字符串轉為流,支持 >> 運算符
ss >> val自動跳過空白字符,解析 int
move(row)C++11 移動語義,高效轉移所有權

常見坑與對策

  • 末尾換行導致多一行空向量 → if (row.empty()) continue;
  • 輸入含非數字字符 → ss >> val 失敗會停止,可檢查 ss.fail() 跳過
  • 矩陣列數不一致 → 業務層驗證 row.size() == expectedCols
  • 大數據量 → 預留容量 matrix.reserve(1000); row.reserve(100);

進階:已知行列數的讀法

int rows, cols;
cin >> rows >> cols;
vector<vector<int>> mat(rows, vector<int>(cols));
for (int i = 0; i < rows; ++i)
    for (int j = 0; j < cols; ++j)
        cin >> mat[i][j];

「按行讀取 + 字符串流解析」是處理不定列矩陣輸入的通用模板,值得收藏。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved