Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Чтение файла в std::vector<unsigned char>

18K
24 декабря 2006 года
uighur
17 / / 24.12.2006
Как лучше читать файл в std::vector<unsigned char>:читать побайтово и добавлять в вектор, или делать один read а потом добавлять в вектор весь массив(передать указатель на начало и конец в виде итераторов)?
63
24 декабря 2006 года
Zorkus
2.6K / / 04.11.2006
Думаю, что в массив, и потом создавать вектор, передавая эти указатели конструктору (хотя, лучше поэкспериментировать:)).
P.S. Но если ты будешь читать, и потом уже добавлять, то резервируй сразу размер вектора достаточно большой, иначе быстрое время добавления в конец будет ухудшено необходимостью перераспределения
памяти.
1.8K
25 декабря 2006 года
_const_
229 / / 26.11.2003
1. Определить размер файла.
2. Зарезервировать в векторе достаточное место.
3. Прочитать весь файл за раз (вектор гарантирует последовательное размещение элементов).
18K
25 декабря 2006 года
uighur
17 / / 24.12.2006
А читать куда?Системный вызов read имеет параметр void *buf
8.8K
25 декабря 2006 года
The_Ice
109 / / 04.04.2006
Туда и читай (:
FILE*f=fopen("...","rb");
fpos_t sz;
fseek(f,0,2);
fgetpos(f,&sz);
char* p=new char[sz];
fread(p,sz,1,f);
fclose(f);
/*что там тебе нужно*/
delete [] p;
63
25 декабря 2006 года
Zorkus
2.6K / / 04.11.2006
Зачем FILE? Если уж использовать вектор, то читать лучше средствами С++, библиотеки,
ifstream in("somefile" , ios::binary);
и.т.д.
9
25 декабря 2006 года
Lerkin
3.0K / / 25.03.2003
Вообще говоря, довольно странное использование вектора. Почему не воспользоваться обычными средствами?
63
25 декабря 2006 года
Zorkus
2.6K / / 04.11.2006
Цитата: Lerkin
Вообще говоря, довольно странное использование вектора. Почему не воспользоваться обычными средствами?


Согласен, странновато. Но если надо его как-то хитро обрабатывать, файл, то почему бы и нет. Зачем нужные функции вручную писать?:)

1.8K
25 декабря 2006 года
_const_
229 / / 26.11.2003
Цитата: uighur
А читать куда?Системный вызов read имеет параметр void *buf


Да, собственно, в &vec.at(0). Вспоминаем, что в векторе элементы хранятся подряд, как в массиве.

18K
25 декабря 2006 года
uighur
17 / / 24.12.2006
Спасибо
63
25 декабря 2006 года
Zorkus
2.6K / / 04.11.2006
Цитата: _const_
Да, собственно, в &vec.at(0). Вспоминаем, что в векторе элементы хранятся подряд, как в массиве.


Так как ты предлагаешь, можно, конечно, но раз автор использует STL - почему бы не использовать более удобные средства работы с файлами, чем "системный вызов read"? Почему не использовать потоковый ввод?

1.8K
25 декабря 2006 года
_const_
229 / / 26.11.2003
Через итераторы - проиграем в производительности. Через filebuf - скорее всего тоже. Да и метод этот вполне удобен (по-моему), разве что будут проблемы с переходом на другие контейнеры. А оно автору надо?
63
26 декабря 2006 года
Zorkus
2.6K / / 04.11.2006
Ну насчет скорости - спорно, надо проверять. Но вообще, раз автору все равно - то верно, какой смысл попусту спорить:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог