将不等的行读入向量的向量

时间:2019-04-02 20:37:44

标签: c++

我发现了几个类似的问题,需要逐行12读取文件,我试图按照它们进行操作,但是看来我的代码无法正常工作。

这是我的尝试:

输入文件

0 3 5 7
1 5 6 7 9
2 3 6 7 8
3 0 2 7 9
4 6 8
5 0 1 7
6 1 2 4 9
7 0 1 2 3 5 8
8 2 4 7
9 1 3 6

代码

int main() {

    std::vector<std::vector<int>> a;
    a.resize(10);

    std::string filename = "data/a.adjlist";

    std::ifstream file(filename);
    if (file.is_open()) {
        std::string line;
        int counter = 0;

        while (getline(file, line)) {
            printf("%s \n", line.c_str());
            std::istringstream iss(line);
            int value;
            while(iss >> value) 
                a[counter].push_back(value);
            counter ++;
        }
    }
    file.close();
    for (int i=0; i<a.size(); i++) {
        for (int j=0; j<a[0].size(); j++) {
            cout << a[i][j] << " ";
        }
        cout << "\n";
    }

}

输出

0 3 5 7
1 5 6 7
2 3 6 7
3 0 2 7
4 6 8 7
5 0 1 7
6 1 2 4
7 0 1 2
8 2 4 7
9 1 3 6

1 个答案:

答案 0 :(得分:1)

for (int j=0; j<a[0].size() ; j++)

应该是

for (int j=0; j<a[i].size(); j++)

更安全,无需再摆弄索引:

   for (auto& aa : a) {
        for (auto& b : aa) {
            cout << b << " ";
        }
        cout << "\n";
    }