Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись STL в файл. 
:(
    Опции темы
Sweras
Дата 10.6.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.5.2007

Репутация: нет
Всего: нет



Здравствуйте!
Надо записать элементы STL-списка в файл. Почитал MSDN, некторые другие материалы и написал вот это:
Код

#include "stdafx.h"
#include <list>
#include <algorithm>
#include <string>
#include <stdio.h>

using namespace std;
typedef list<string> LISTSTR;
FILE *stream;

void main(void)
{
    LISTSTR listOne;
    LISTSTR::iterator i;
    
    listOne.push_front("трактор");
    listOne.push_front("самолет");
    listOne.push_front("БТР");
    listOne.push_back("баржа");

    listOne.sort();

    if((stream = fopen("data.txt","w+t")) != NULL )
    {
     for (i = listOne.begin( ); i!= listOne.end( ); i++)
     {
        fwrite(*i,sizeof(string),size(listOne),stream);
     }
      fclose(stream);
   }
    
}


Это программа - компановка нескольких стандартных примеров, ибо в С++ я мало что понимаю.
Как следствие - компилятор выдает ошибку и тыкает пальцем в сторону первого аргумента ф-ии  fwrite. Поможите советом, а?
И еще. 
sizeof(string)
Как написать код, который бы определял размер КОНКРЕТНОЙ переменной, а не класса строки?
Заранее благодарен.

Это сообщение отредактировал(а) Sweras - 10.6.2007, 12:30
PM MAIL   Вверх
zkv
Дата 10.6.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Sweras @  10.6.2007,  12:29 Найти цитируемый пост)
Как написать код, который бы определял размер КОНКРЕТНОЙ переменной, а не класса строки?

метод std::string::length():
Код

std::string str;
int i = str.length();


и вообще
Код

ofstream fOut("data.txt");
    if( !fOut )
    {
     for (i = listOne.begin( ); i!= listOne.end( ); i++)
     {
        fOut<<*i;
     }
      fOut.close();
   }


Это сообщение отредактировал(а) zkv - 10.6.2007, 13:38
PM MAIL   Вверх
Ulysses4j
Дата 10.6.2007, 13:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

Репутация: 4
Всего: 10



Я бы даже сказал:
Код

#include <iterator>
#include <cstdlib>
//...
    ofstream fOut("data.txt");
    if( NULL == fOut ) {
        //proccess "file not found" error
        exit( EXIT_FAILURE );
    }

    std::copy( listOne.begin(), listOne.end(), std::ostream_iterator<string>( fOut, "\n" ) );


Это сообщение отредактировал(а) Ulysses4j - 10.6.2007, 13:26


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
zkv
Дата 10.6.2007, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Ulysses4j, да, только cstdlib подключать не нужно, нужен fstream  smile 
PM MAIL   Вверх
Ulysses4j
Дата 10.6.2007, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

Репутация: 4
Всего: 10



На счет <fstream> совершенно справедливое замечание. Но cstdlib для exit(). Вообще, я обычно return какой-нибудь ненулевой ставлю. А это просто смотрел книжку Джосаттиса - он там пользуется exit( EXIT_FAILURE ) в такой ситуации. Всегда хочется стать на плечи великих...  smile 

Это сообщение отредактировал(а) Ulysses4j - 10.6.2007, 18:53


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
zkv
Дата 10.6.2007, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Ulysses4j @  10.6.2007,  18:48 Найти цитируемый пост)
Но cstdlib для exit().

проморгал... сорри. 
Уже забыл как он (exit) выглядит smile
С ним проблемы могут быть только если нам важно, чтобы по завершении работы правильно были вызваны деструкторы объектов в стеке (насчет тех, которые в сегменте данных -  я не в курсе, может просветит кто-нибудь, будут ли для них вызваны деструкторы?) 
Вобщем важно понимать когда и что делаешь. Правда не всегда получается smile

сделал пример для тестирования:
Код

#include <iostream>
#include <string>

class MyClass
{
    std::string m_Where;
public:
    MyClass( const std::string &Where )
        : m_Where( Where )
    {}

    ~MyClass()
    {
        std::cout<<"\nMyClass::~MyClass() in "<<m_Where;
    }
};

MyClass myclass( "data segment" );

int main()
{
    MyClass myclass( "stack" );
    exit(10);//с этой строкой и без нее
}
Цитата(Без exit(10);)

MyClass::~MyClass() in stack
MyClass::~MyClass() in data segment


Цитата(При exit(10);)

MyClass::~MyClass() in data segment

PM MAIL   Вверх
Ulysses4j
Дата 10.6.2007, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

Репутация: 4
Всего: 10



Ого! Неожиданный для меня результат. Спасибо, zkv, я это учту на будущее.


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0578 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.