По какой-то причине я решил сделать очень простое приложение, которое отображает все цифры от 1 до 1 000 000. Я заметил, что для отображения результатов требуется больше времени, чем для их хранения. Я предположил, что для сохранения всех значений потребуется больше времени, чем для их отображения. Я также помню, что читал, если правильно помню, что нет никакой разницы между пользовательским вводом и чтением из текстового файла в консольном приложении, поэтому я предположил, что отображение и хранение одинаковы. Может кто-нибудь объяснить, почему это? Согласно книге, которую я читаю, поток очень похож на cout, поэтому я не понимаю, почему это занимает больше времени.Из потока быстрее, чем cout? || Хранение быстрее, чем визуальный вывод
Почему это медленнее для отображения результатов с использованием cout
, чем для хранения результатов в текстовом файле с использованием ofstream
?
COUT = 169.168 секунд
ofstream = 3.473 секунды
метод ofstream
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
namespace patch //used to patch some C++11 functions not included in mingw 4.7 // to_string
{
template < typename T > std::string to_string(const T& n)
{
std::ostringstream stm ;
stm << n ;
return stm.str() ;
}
}
using namespace patch;
using namespace std;
int main()
{
int minimumRange = 1; //sets minimum number in range
int maximumRange = 1000000; // sets maximum number in range
string strRanges = to_string(minimumRange) + "-" + to_string(maximumRange); //appends string names
ofstream myRange;
myRange.open(strRanges + ".txt");
for (int i = minimumRange; i<=maximumRange; ++i)
{
myRange << to_string(i) << "\n";
}
myRange.close();
return 0;
}
метод соиЬ
#include <iostream>
using namespace std;
int main()
{
int minimumRange = 1;
int maximumRange = 1000000;
for (int i = minimumRange; i<=maximumRange; ++i)
{
cout << i << "\n"; //using "/n" instead of endl; for speed purposes
}
return 0;
}
Сама консольная/терминальная программа работает медленно. –
Возможно, система кэширует файл для вас и записывает данные несинхронно на диск? Это будет простой доступ к памяти для вашей версии файла. Запись на консоль связана скоростью консоли (что может быть довольно медленным) – user1781290
D: ... почему вы используете '' stringstream'' для печати ints. T_T мой мозг болит прямо сейчас. – quasiverse