簡體   English   中英

如何從文本文件讀取數據並推回向量?

[英]how do i read data from textfile and push back to a vector?

我有一個文本文件“ test.txt”,它按如下方式存儲我的數據,每個定界符字段之間都有一個空格。

代號:姓名:Coy

045: Ted: Coy1
054: Red: Coy2

如何從文件讀取此數據並將其插入向量?

vector <Machine> data;
Machine machine

void testclass(){
ifstream inFile("test.txt");
if (!inFile){
    cout << "File couldn't be opened." << endl;
    return;
}
while(!inFile.eof()){
    string code,name,coy;
    getline(inFile,code, ':');
    getline(inFile,name, ':');
    getline(inFile,coy, ':');
data.push_back(machine)

}

但是推送數據似乎有問題

正如其他人已經指出的那樣,一個問題是您正在將數據讀取到局部變量( codenamecoy )中,但是在將其添加到向量之前,從未將這些值放入machine

但這不是 唯一的問題。 您的while (!infile.eof())也是錯誤的(實際上, while (!whatever.eof())本質上總是錯誤的)。 您通常想做的是在閱讀成功后繼續閱讀。 whatever.eof()僅在您嘗試進行讀取並且開始讀取之前到達文件末尾之后才返回true。

我通常會解決的方法是為您的Machine類定義流提取器:

class Machine { 
// ...

    friend std::istream &operator>>(std::istream &is, Machine &m) { 
        std::getline(is, m.code, ':');
        std::getline(is, m.name, ':');
        std::getline(is, m.coy, ":");
        return is;
    }
};

使用此功能,您可以閱讀如下內容:

std::vector<Machine> machines;

Machine machine;

while (infile >> machine) 
    machines.push_back(machine);

為類型定義流提取器后,還有另一種可能需要考慮; 您可以從一對迭代器初始化向量:

std::vector<Machine> machines((std::istream_iterator<Machine>(infile)),
                               std::istream_iterator<Machine>());

...這將從文件中讀取所有數據(使用上面定義的operator>> ),然后使用它來初始化machines向量。

您應該讀取數據並將其放入Machine類的對象的成員變量中。 然后將該對象放在Vector上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM