Вставьте содержимое вектора в другой вектор с определенным смещением.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Вставьте содержимое вектора в другой вектор с определенным смещением.

Сообщение Anonymous »

Без контекста, вот основной вопрос: я хочу вставить содержимое std::vector a {0, 3, 6, 8 в std::vectorfile_array)
RepackFile(data_file_data, file_section);
[/code]

Код: Выделить всё

FileSection
— это структура, содержащая важную информацию о файле, который я хочу переупаковать, например его смещение в data_file_data.
Вот функция, которая переупаковывает файлы:

Код: Выделить всё

void DictDataManager::RepackFile(std::vector &data_file_data, const FileSection &file_section)
{
std::vector file_data;
uint32_t file_data_size = is_compressed ? file_section.compressed_file_length : file_section.decompressed_file_length;
file_data.resize(file_data_size);

std::ifstream extracted_file(file_section.file_path);
extracted_file.read(reinterpret_cast(file_data.data()), file_data_size);
extracted_file.close();

if (is_compressed)
file_data = CompressDataBuffer(file_data, file_section.compressed_file_length);

// What now?
}
Проблема, например, в том, что у меня есть два файла, которые начинаются со смещения 0, но один файл имеет размер 37956 байт, а другой — 53856 байт. Данные для обоих одинаковы в первых 37956 байтах, поэтому я смогу без проблем перезаписать данные в data_file_data после того, как уже вставил данные первого файла, и теперь хочу вставить данные второго file.
Я пытался использовать функцию Insert() таким образом data_file_data.insert(data_file_data.begin()+file_section.offset, file_data.begin() , file_data.end());, но, к сожалению, это не перезаписывает какие-либо данные, а просто вставляет их, что дает мне вектор значительно большего размера, чем ожидалось, и, конечно, не восстанавливает исходный файл.
Итак, какая простая альтернатива мне действительно нужна — просто записывать данные с определенного смещения и в то же время динамически выделять вектору новый размер, например, Insert() сделал бы это?

Подробнее здесь: https://stackoverflow.com/questions/784 ... ain-offest
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»