输入大字符串的最快方法?

时间:2013-07-01 19:23:05

标签: c++ string parsing input

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

有没有办法使用scanf或其他东西获取输入,但仍然得到一个C ++字符串?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

cin >> str是您在STL中找到的最接近scanf("%s, str")的内容。 scanfcin更快的唯一原因是因为它会为您提供char*而不是字符串,而您可以从char*创建新字符串只需将它们传递给string()构造函数,这与使用cin >> str几乎相同。

答案 2 :(得分:0)

您可以使用getline

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

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