使用二维向量从txt文件中读取文件

3

在使用2D向量时,是否可以使用[]运算符?例如,我有以下代码:

vector<vector<string>> data;

ifstream myReadFile;
myReadFile.open("stoixeia_astheni.txt");


while (!myReadFile.eof()) {

    for(int i=0; i<1; i++){
        for (int j=0; j<4; j++){
            myReadFile  >> data[i][j];
        }
    }

}

我收到了“超出范围”的错误信息。我的文件有5行和4列。


你是否为你的向量分配了正确的长度,或者至少将它们调整为适当的大小? - tmpearce
@Fere 你可以在彼此之间嵌套任意数量的向量(我想应该是有限制的),但就性能和可读性而言,这样做可能会有些棘手。 - Drise
1个回答

6

你的向量 data 是空的,它的 size() 为0。你需要先使用 resize 函数来重新调整大小或者使用 push_back() 函数添加新的元素:

while (!myReadFile.eof()) {    
    for(int i = 0; i < 1; i++){
        vector<string> tmpVec;
        string tmpString

        for (int j = 0; j < 4; j++){
            myReadFile  >> tmpString;
            tmpVec.push_back(tmpString);
        }
        data.push_bac(tmpVec);
    }
}

你还可以在声明data时直接设置其大小:
vector<vector<string>> data(5,vector<string>(4));

ifstream myReadFile;
myReadFile.open("stoixeia_astheni.txt");

while (!myReadFile.eof()) {

    for(int i=0; i < 5; i++){
        for (int j=0; j<4; j++){
            myReadFile  >> data[i][j];
        }
    }

}

1
非常好的解释答案加上两个示例,展示可能的解决方案。 - Drise
Zeta我尝试做类似于Java中的ArrayLists的东西。无论如何,非常有用的答案,谢谢。 - Jose Ramon
2
@zeta 很低或者不存在?无论如何,我都给了我的+1作为补偿。 - Drise
第一种解决方案中应该不是“i < 5”吗? - Robur_131

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接