Eksperymentowałem z C++ próbując dowiedzieć się, jak mogę wydrukować liczby od 0 do n tak szybko, jak to możliwe.Jak mogę wydrukować znak nowej linii bez przepłukiwania bufora?
Początkowo tylko drukowanych wszystkich numerów z pętlą:
for (int i = 0; i < n; i++)
{
std::cout << i << std::endl;
}
Myślę jednak, że ten opróżnia bufor po każdej liczbie, że wyjścia, a na pewno, że musi trochę potrwać, więc próbowałem aby najpierw wydrukować wszystkie liczby do bufora (lub tak naprawdę, aż będzie pełna, jak się wydaje, wtedy wydaje się, że automatycznie się przepłukuje), a następnie przepłukać wszystko na raz. Jednak wydaje się, że drukowanie \ n po opróżnia bufor jak std :: endl więc pominięto go:
for (int i = 0; i < n; i++)
{
std::cout << i << ' ';
}
std::cout << std::endl;
To wydaje się uruchomić około 10 razy szybciej niż w pierwszym przykładzie. Jednak chcę wiedzieć, jak przechowywać wszystkie wartości w buforze i przepłukać je wszystkie naraz, zamiast pozwolić jej wylewać za każdym razem, to staje się pełne, więc mam kilka pytań:
- to możliwe, aby wydrukować przełamane bez przepłukiwania bufora?
- Jak zmienić rozmiar bufora, aby móc przechowywać wszystkie wartości wewnątrz i wypróżnić je na samym końcu?
- Czy ta metoda generowania tekstu jest głupia? Jeśli tak, dlaczego i jaka byłaby lepsza alternatywa dla niego?
EDIT: Wydaje się, że moje wyniki były tendencyjne przez system laggy (Terminal app smartphone) ... Z szybszym systemem czasy wykonania wykazują żadnej znaczącej różnicy.
Przed zapisaniem spróbuj zdekonfigurować flagę [unitbuf] (http://en.cppreference.com/w/cpp/io/manip/unitbuf) na 'cout'. –
Nie używaj 'endl', ponieważ powoduje to przepłukanie itp. Zamiast tego użyj' '\ n'' lub' "\ n" '? Lub możesz dostać się do bardziej skomplikowanych sztuczek ustawiając tryb buforowania 'std :: cout' na pełne buforowanie. –
'std :: cout << '\ n'' wyświetla nową linię. Nie należy ręcznie spłukiwać, chyba że masz ku temu powód. – nwp