2016-12-06 49 views
-3
getline(userfile, buffer); 

new_user.birth_year = atoi(buffer.c_str()); 

for (stringstream s(buffer); s >> id;) 
{ 
    new_user.friends.push_back(atoi(id.c_str())); 

回答

0

這顯然是希望的格式是這樣的讀取一些數據的目的:

1992 17 3 34 9 

第一個數字是出生用戶的一年。之後的數字是該人朋友的身份證號碼。

第一位(new_user.birth_year = atoi(buffer.c_str());)讀取第一個數字並將其分配給new_user.birth_year

下一個循環讀取其餘數字並將它們添加到保存該用戶朋友的ID的集合(可能爲std::vector)。輕微的可能性錯誤:它看起來像是將他們的出生年份作爲朋友的ID以及其餘的ID號碼。

+0

@Mar:我不確定是什麼:「這些行似乎在一段時間後緩衝?」手段。如果你的意思是:「他們用過緩衝式閱讀嗎?」好的。如果別的東西......好,也許你可以澄清你想知道的。 –

+0

緩衝的主要原因是從文件中進行小的讀操作通常會有相當多的開銷,所以通常不需要進行大量的小讀操作,而是需要執行一些大的讀操作,將數據放入緩衝區,然後從緩衝區讀取小塊。 –

+0

@傑裏謝謝 – Mar

1

getline(userfile, buffer);

讀取在一行文本入變量buffer

new_user.birth_year = atoi(buffer.c_str());

atoi該功能需要一個C風格串。方法c_str()返回std::string中的C風格字符串。
atoi函數將C樣式字符串轉換爲整數。
整數結果然後分配給new_user.birth_year

for (stringstream s(buffer); s >> id;)
{

for環,stringstream s(buffer)的第一部分,創建從buffer字符串的字符串流。 stringstream允許將字符串視爲流。

s >> id從字符串中讀取一個值並將結果放入id

new_user.friends.push_back(atoi(id.c_str()));

此行轉換id字符串的整數(參見上文關於atoi)和附加到new_user對象內的矢量friends的整數。

+0

謝謝托馬斯 – Mar

+0

這些行似乎緩衝一段時間?如果是這樣,爲什麼? getline(userfile,buffer); for(stringstream s(buffer); s >> id;){new_user.friends。的push_back(的atoi(id.c_str())); } this-> users.push_back(new_user); } – Mar

+0

沒有,沒有緩衝本身。但是,由於字符串變量重新分配,可能會延遲執行。 –