代码从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快吗?
答案 0 :(得分:1)
没有理由scanf
应该比getline
更快。事实上,在这种情况下,你会期望相反。 getline
函数知道需要获取一行,并针对该目的进行了优化。 scanf
函数必须理解您的格式字符串,并确定您在可能请求各种其他行为的上下文中尝试读取一行。所以我们希望getline
更快。