为什么getline比scanf更快?

时间:2014-10-15 21:25:12

标签: c++ scanf getline

代码从stdin读取一行(最多30个字符)并使用std :: map

计算它的出现次数
std::map<std::string, int> mymap;

函数getline:

std::string str;
while (std::getline(std::cin,str))
    mymap[str]++;

scanf的:

char str[30];
while(scanf("%30[^\n]%*c", str) != EOF)
    mymap[str]++;

使用大输入getline几乎快2倍。

扫描不应该比getline快吗?

1 个答案:

答案 0 :(得分:1)

没有理由scanf应该比getline更快。事实上,在这种情况下,你会期望相反。 getline函数知道需要获取一行,并针对该目的进行了优化。 scanf函数必须理解您的格式字符串,并确定您在可能请求各种其他行为的上下文中尝试读取一行。所以我们希望getline更快。