индекс (4 байта) + 6 значений из вектора по 2 байта
Значит правильно выбирайте размер данных. int, в общем случае, может иметь размер 16, 32 или 64 бита, в зависимости от системы и компилятора, short - от 8 до 64 бит.
Используйте int32_t для 4-байтовых и int16_t для 2-байтовых чисел (__int32 и __int16 в старых версиях Visual C++).
Cтруктура вектора содержит не значения, записанные в вектор, а указатели на начало и конец блока памяти, выделенного для хранения этих значений (
https://stackoverflow.com/questions/27466373/memor... Реализация этой структуры зависит от компилятора. Поэтому в строке
fout.write((char*)&vec[i * 6], row * sizeof(short));
вы получаете не данные, а байты из структуры вектора.