我正在为使用 C++ 的“标准标准输入程序”的竞赛编写程序。输入的第一行表示从那时起预计有多少行 (x) 作为输入。这些输入行可以是字符串、整数或两者的某种组合,并且每行恰好包含两个由空格分隔的元素。目前,我正在以类似于以下的方式一次接受每一行(在请求下一行之前处理信息):
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++ 函数在空间进入组成它们的两个元素。
谢谢
最佳答案
通常,在 C++ 中读取输入的习语更多地遵循以下几行:
std::ios_base::sync_with_stdio(false); //tell iostreams to be fast
int number_of_lines;
std::cin >> number_of_lines;
if (!std::cin) *ERROR*;
for( ; number_of_lines>0; --number_of_lines) {
unsigned n, m;
std::cin >> n >> m;
if (!std::cin) *ERROR*;
//process n and m here
}
你说“这些输入行可以是字符串、整数或两者的某种组合”,但你怎么知道哪些是哪些?上面的代码假设一切都是数字,因为如果你不知道类型,输入就没有用。
关于stdin 的 C++ IO 优化和字符串处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14491648/