Ich begann Programmierung Wettbewerbe in gehen zu tun (nur die Sprache zu lernen) und zu meiner Überraschung festgestellt, dasswie kann ich von stdin in Go effizient Zahlen lesen (oder warum fmt.Scanf so ineffizient ist)
var T int
fmt.Scanf("%d", &T)
ist unvorstellbar langsam. Wie langsam? Um read 10^5 integers dauert es 2,5 Sekunden (im Vergleich Python macht es in 0,8 Sekunden).
Also warum ist es so langsam und wie sollte ich richtig lesen int
, uint64
und float64
?
Verwenden Sie 'bufio'? Warum 'fmt.Scanf' und nicht nur' strconv.Atoi'? Sende den Code, es gibt nicht genug Informationen. –
@ Ainar-G welchen Code suchen Sie. Ich lese nur eine ganze Reihe von Ganzzahlen von stdin. Und ich habe klar gesagt, wie ich es gemacht habe (mit 'fmt.Scanf' was bedeutet, dass nein, ich habe' bufio' nicht benutzt). Warum nicht einfach "strconv.Atoi", weil ich herausgefunden habe, wie man in der Antwort auf stackoverflow eine ganze Zahl liest und es scanf verwendet. Ich denke, es sind mehr als genug Informationen, um zu verstehen, wovon ich spreche. –
@Salvador Dali Nur neugierig, wie Sie 10^5 ganze Zahlen zu stdin liefern? Kannst du das bei 2,5 Sekunden tun? – Uvelichitel