2014-10-29 30 views
0

我正在將某個數據從文件讀取到vector<struct>。該代碼是這樣的:無法從字符串成員的結構向量中讀取名稱

#include <fstream> 
#include <map> 
#include <string> 
#include <vector> 
#include <algorithm> 

using namespace std; 

int main() 
{ 
    ifstream fin("gift1.in", ios::in); 
    ofstream fout("gift1.out", ios::out); 

    unsigned short NP; 

    struct person 
    { 
     string name; 
     unsigned int gave; 
     unsigned int received; 
    }; 

    vector<person> accounts; 

    string tmp_name; 

    fin >> NP; 
    accounts.resize(NP); 
    for (auto i : accounts) 
    { 
     fin >> tmp_name; 
     fout << "Just read this name: " << tmp_name << "\n"; 
     i.name = tmp_name; 
     i.gave = 0; 
     i.received = 0; 

     fout << "We have just created this person: " << i.name << ";" << i.gave << ";" << i.received << "\n"; 
//(1) 
     // OK, this part works 
    } 

    fout << "Freshly created ledger:\n"; 
    for (auto l : accounts) 
     fout << "Person: " << l.name << "; Gave: " << l.gave << ";Received " << l.received << "\n"; 
//irrelevant stuff further 
} 

的proble是名在(1)循環打印出來,但他們不是在遠程for循環。 這是爲什麼呢?

示例輸出是這樣的:

Just_read_this_name:_mitnik We_have_just_created_this_person:_mitnik; 0; 0 Just_read_this_name:_Poulsen We_have_just_created_this_person:_Poulsen; 0; 0 Just_read_this_name:_Tanner We_have_just_created_this_person:_Tanner; 0; 0 Just_read_this_name:_Stallman We_have_just_created_this_person:_Stallman; 0; 0 Just_read_this_name:_Ritchie We_have_just_created_this_person:_Ritch即; 0; 0 Just_read_this_name:_Baran We_have_just_created_this_person:_Baran; 0; 0 Just_read_this_name:_Spafford We_have_just_created_this_person:_Spafford; 0; 0 Just_read_this_name:_Farmer We_have_just_created_this_person:_Farmer; 0; 0 Just_read_this_name:_Venema We_have_just_created_this_person:_Venema; 0; 0 Just_read_this_name:_Linus We_have_just_created_this_person:_Linus; 0; 0 Freshly_created_ledger: 人:_; _都給:_0; Received_0 人:_; _都給:_0; Received_0 人:_; _都給:_0; Received_0 人: _; _都給:_0; Received_0 人:_; _都給:_0; Received_0 人:_; _都給:_0; Received_0 人:_; _都給:_0; Received_0 人:_; _都給:_0; Received_0 人: _; _都給:_0; Received_0 人:_; _都給:_0; Received_0

回答

7
for (auto i : accounts) 

每個i,你得到的是一個元素的accounts副本。當你做i.name = tmp_name時,你只是修改這個副本。您需要參考,以便您可以修改元素本身:

for (auto& i : accounts) 
+1

這應該對我來說真的很明顯。但是,非常感謝。 – Chiffa 2014-10-29 12:36:54