0

我必须从中读取大量字符串,stdin因此时间是一个关键问题。字符串在连续的行上并且没有空格,所以我可以简单地使用 while(cin>>str) { //code },但这非常慢。我听说 scanf 比 cin 快得多,但如果我使用 scanf("%s,str)我认为 str 被视为char*而不是 C++ string,所以我不能使用 STL。我可以将输入作为 char* 并将所有字符复制到 C++ 字符串中,但 IMO 也会很慢。

有没有办法使用 scanf 或其他方法获取输入,但结果仍然是 C++ 字符串?

4

3 回答 3

1

如果您知道文本的平均或最大大小,则可以std::string使用预先分配的大小进行创建。占用大量时间的一个区域是内存(重新)分配std::string

于 2013-07-01T20:19:53.380 回答
0

cin >> str是您在 STL 中找到的最接近scanf("%s, str"). 唯一的原因scanf会比它更快,cin因为它会给你一个char*而不是一个字符串,虽然你可以char*通过将它们传递给string()构造函数来创建一个新的字符串,但这几乎与使用相同cin >> str

于 2013-07-01T19:36:56.323 回答
0

您可以使用getline

for (std::string line; getline(std::cin, line); ) {
  do_something_with(line);
}

我不知道它是否比 快cin >> line,但它可能是,因为它不需要处理换行符以外的空格。但我不认为这与哨兵建设的开销一样重要。

于 2013-07-01T20:21:28.857 回答