Автор: Алекс Кэш (25.11.2011 в 13:43)
Возникла необходимость выводить в файл большой объем данных.
При этом довольно критична скорость вывода.
Данные лежат в оперативной памяти таким образом: в контейнере Vector около 1.000.000 элементов, каждый из этих элементов - экземпляр класса ClassStateVector. (привожу его сокращенно).
ClassStateVector
{
public:
ClassStateVector(){};
GregTime itsGregTime;
double itsTsinse;
double itsJDtime;
double itsX1; double itsX2; double itsX3;
double itsV1; double itsV2; double itsV3;
double itsFi; double itsLambda; double itsHight;
double itsElevation;double itsAzimuth;double itsRange;
double itsLambdaL;double itsFiL;double itsHL;
double itsLambdaP;double itsFiP;double itsHP;
bool itsPriznakVidimosti;
};
class GregTime
{
public:
GregTime ()
{};
GregTime (int year,int month,int day,int hour,int min,double sec):
itsYear(year),itsMonth(month),itsDay(day),
itsHour(hour),itsMin(min),itsSec(sec)
{};
GregTime & operator= (const GregTime &);
friend std::ostream& operator<<(std::ostream& out, const GregTime& );
int itsYear;
int itsMonth;
int itsDay;
int itsHour;
int itsMin;
double itsSec;
};
|
надо вывести некоторые поля экземпляров класса (типа double).
если делать стандартно, с помощью потоков
fstream fout(OutFileName);
for (int i=0; i!=Nmas; i++)
{
fout << Vecto[i].itsGregTime ;
fout << Vecto[i].itsAzimuth ;
fout << Vecto[i].itsElevation ;
fout << Vecto[i].itsRange ;
fout << Vecto[i].itsFi;
fout << Vecto[i].itsLambda;
fout << Vecto[i].itsHight ;
fout << Vecto[i].itsFiL*180;
fout << Vecto[i].itsLambdaL*180;
fout << Vecto[i].itsHL ;
fout << Vecto[i].itsFiP*180;
fout << Vecto[i].itsLambdaP*180;
fout << Vecto[i].itsHP;
fout << endl;
};
|
, то получается очень долго. Может быть fprintf() будет работать быстрее? но тогда придется все перегруженные операторы переписывать, есть ли какой то способ ускорить вывод в поток?