我必须阅读来自stdin
的大量字符串,所以时间是一个关键问题。字符串在连续的行上并且没有空格,所以我可以简单地使用while(cin>>str) { //code }
,但这非常慢。我听说scanf比cin快得多但是如果我使用scanf("%s,str)
我认为str被视为char*
而不是C ++ string
所以我不能使用STL。我可以将输入作为char *并将所有字符复制到C ++字符串中,但IMO也会很慢。
有没有办法使用scanf或其他东西获取输入,但仍然得到一个C ++字符串?
答案 0 :(得分:1)
如果您知道文本的平均大小或最大大小,则可以使用预先分配的大小创建std::string
。占用大量时间的一个区域是std::string
的内存(重新)分配。
答案 1 :(得分:0)
cin >> str
是您在STL中找到的最接近scanf("%s, str")
的内容。 scanf
比cin
更快的唯一原因是因为它会为您提供char*
而不是字符串,而您可以从char*
创建新字符串只需将它们传递给string()
构造函数,这与使用cin >> str
几乎相同。
答案 2 :(得分:0)
您可以使用getline:
for (std::string line; getline(std::cin, line); ) {
do_something_with(line);
}
我不知道它是否比cin >> line
更快,但它可能是,因为它不需要处理除换行符之外的空格。但我不相信这与哨兵建设的开销一样重要。