stdin 的 C++ IO 优化和字符串处理

标签 c++ performance methods io

我正在为使用 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/

相关文章:

java - getClass().getMethod ("name",未知)

java - 简单的评分系统和方法

c++ - 从 C++ 编写 .csv 文件

asp.net - 闲置一段时间后,Web 应用程序性能下降

java - Java中的部分反序列化和序列化?

c# - 如何避免窗体上出现大量用户控件

java - 为什么 .setColor(,,,) 说无法在此程序中找到符号?

c++ - 在多个函数中使用时 va_list 的意外行为

c++ - Qt 对象仍然可以在没有事件循环的情况下被 deletedLater()?

c++ - QtTest单元测试,如何添加位于另一个项目中的头文件?