Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: Алекс Кэш   (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() будет работать быстрее? но тогда придется все перегруженные операторы переписывать, есть ли какой то способ ускорить вывод в поток?


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: