Stavo sperimentando con C++ cercando di capire come stampare i numeri da 0 a n il più velocemente possibile.Come posso stampare una nuova riga senza svuotare il buffer?
Inizialmente ho appena stampati tutti i numeri con un ciclo:
for (int i = 0; i < n; i++)
{
std::cout << i << std::endl;
}
Ritengo tuttavia questo svuota il buffer dopo ogni singolo numero che emetta, e sicuramente che deve richiedere un certo tempo, così ho provato per prima cosa stampare tutti i numeri sul buffer (o in realtà fino a quando non è pieno come sembra, quindi sembra che si svuotino automaticamente) e poi scarichi tutto in una volta. Tuttavia sembra che la stampa di un \ n dopo vampate di buffer come lo std :: endl così ho omesso che:
for (int i = 0; i < n; i++)
{
std::cout << i << ' ';
}
std::cout << std::endl;
Questo sembra funzionare circa 10 volte più veloce rispetto al primo esempio. Tuttavia voglio sapere come memorizzare tutti i valori nel buffer e lavare tutto in una volta, piuttosto che lasciare a filo ogni volta che si riempie quindi ho alcune domande:
- E 'possibile stampare una nuova riga senza sciacquare il buffer?
- Come posso modificare la dimensione del buffer in modo da poter memorizzare tutti i valori al suo interno e svuotarla alla fine?
- Questo metodo di emissione di testo è stupido? Se è così, perché, e quale sarebbe un'alternativa migliore ad esso?
EDIT: Sembra che i miei risultati sono stati influenzati da un sistema di lag (app Terminal di uno smartphone) ... Con un sistema più veloce i tempi di esecuzione non mostrano differenze significative.
Provare a deselezionare [unitbuf] (http://en.cppreference.com/w/cpp/io/manip/unitbuf) flag su 'cout' prima di scrivere. –
Non usare 'endl' perché forza lo svuotamento, ecc. Usa' '\ n'' o' "\ n" 'invece? Oppure puoi entrare in trucchi più elaborati impostando la modalità di buffering di 'std :: cout' completamente bufferizzata. –
'std :: cout << '\ n'' stampa una nuova riga. Non svuotare manualmente a meno che non si abbia un motivo per farlo. – nwp