KirillHelm
@KirillHelm

Как заполнить бинарный вектор C++?

Есть вектор:
#include <vector>

using TData = vector<BYTE>;


Необходимо его заполнить из файла:
#include <fstream>

//InPut DATA
	ifstream InputFileData;
	InputFileData.open(src_file_name, ios_base::binary);
	TData DataBuf;
	//HERE copies all data into buffer
	InputFileData.close();


Есть вариант решения:

#include <iterator>

InputFileData((std::istreambuf_iterator<BYTE>(InputFileData)), (std::istreambuf_iterator<BYTE>()));


Но эта вся красота не работает, две ошибки:
1. Вызов объекта типа класса без соответствующей функции operator() или функции преобразования указателя в функцию. (Подчёркивает InputFileData)
2. Отсутствуют экземпляры конструктора, соответствующие списку аргументов. (Подчёркивает первый итератор)

P.S.
Вижу что не правильно написал итераторы, но не знаю как исправить, может у кого есть идеи? Нужно ли менять файловый поток с ofstream, на istream?
  • Вопрос задан
  • 791 просмотр
Решения вопроса 1
Я вообще не понимаю что происходит. Вы пытаетесь в вашем варианте "решения" вызвать функтор? Или конструктор у уже сконструированного объекта?
Первый вариант не поддерживает ifstream. Второй в языке вообще невозможен.

Вам нужно из открытого файла скопировать данные в буфер, так?
Ну тогда бы почему не воспользоваться функцией с именем copy?

std::copy(std::istreambuf_iterator<BYTE>(InputFileData), std::std::istreambuf_iterator<BYTE>(), std::back_inserter(DataBuf));


Или вообще поступить ещё проще и заполнить вектор при создании:

TData DataBuf(std::istreambuf_iterator<BYTE>(InputFileData), std::std::istreambuf_iterator<BYTE>());
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы