我正在編寫使用C++使用「標準stdin程序」的競賽程序。取入的第一行表示從那時起預計有多少行(x)作爲輸入。這些輸入行可以是字符串,整數或這兩者的某種組合,每行只包含由空格分隔的兩個元素。針對標準輸入的C++ IO優化和字符串處理
string initial;
getline (cin,initial);
istringstream stringStream (initial);
vector<string> parsedString;
vector<int> data;
char splitToken = ' ';
while (!stringStream.eof())
{
string subString;
getline(stringStream, subString, splitToken);
parsedString.push_back(subString);
}
for (int i = 0; i <parsedString.size(); i++)
{
string temp = parsedString[i];
int intTemp = atoi(temp.c_str());
data.push_back(intTemp);
}
unsigned int n = data[0];
unsigned int m = data[1];
在我知道傳入的數據將是這一特定情況:目前,我在同一時間服用每行一個類似這樣的方式(要求下一行之前處理的信息)兩個整數,但情況並非總是如此。我想知道是否有辦法讓我的代碼更快,或者通過改變我的方法(可能在知道有多少期望之後立即獲取所有輸入行),或者使用更好的內置C++函數來分割入口行將空間分解爲構成它們的兩個元素。
感謝
whoooa,這是一個很大的開銷/矯枉過正 –
Facebook黑客杯的時間再次:-)你是否應該解決這個問題? (我想我不會在週末發佈任何有關eof()的相關問題!) –
您可能會發現這個鏈接很有用:http://stackoverflow.com/questions/1042110/using-scanf-in-c-programs -is-faster-than-using-cin – lego