我的輸入文件由2行數字分隔的空格組成。我必須從兩行讀取數字並將它們存儲在兩個不同的std::vector
s中。但我不知道每行有多少個數字。我如何確保在閱讀第一行時我還沒有開始閱讀第二行的數字?我試着閱讀他們的字符串,並檢查「\n
」字符,但它不工作....輸入時遇到問題
cin>>str;
while(str[0]!='\n' && str!="") {
sscanf(str.c_str(),"%d",&num);
numz.push_back(num); //numz is the vector for the first line of numbers
cin>>str;
}
有一些巧妙的方式做到這一點?
這一切都開始如此順利......但實際讀入向量可以簡化一點(或至少從代碼中去掉循環):'/ * .. 。*/std :: istringstream iss(line); return std :: vector(std :: istream_iterator (iss),std :: istream_iterator <>());' –
@DavidRodríguez-dribeas:雖然該版本較短,但很難爲其添加適當的錯誤處理(for例如,您需要檢查實際上完整的行是否已被使用;您當然不希望將解析放入return語句中)。另外,我不認爲一個循環是邪惡的。如果他們沒有給他們這麼長的名字,我肯定會更經常地使用'istream_iterator' ;-)(也許他們應該給流模板化'begin' /'end',所以你可以寫' ()'和'iss.end()')。 –
celtschk
不久之前(兩三週),在標準郵件列表中討論了可能增加的'begin' /'end',特別是意圖是支持基於範圍的迭代。它似乎不適合那個特定的用例(沒有可以傳遞的模板參數)不確定這個模板方法是否會更好地被接受,但是如果是這種情況,我會感到驚訝。新的不同的東西。 –