Ой трудный день сегодня был и если что простите

1. Так злобно обходится с STL Vector (далее просто вектор) как вы, абсолютно нельзя, ну совсем нельзя. Помимо ваших любимых данных вектор содержит ну просто кучу всяких вспомогательных вещей начиная от аллокатора и заканчивая итераторами. Поэтому такая запись:
out.write((char*) &myVector, sizeof(myObject) * myVector.size());
мягко говоря наивна. Записаться то он запишется, но ожидать что после:
in.read((char *) &myVector, size);
или
in.read((char *) &myVector, 156);
вы получите готовый объект класса std::vector мягко говоря верх наивности.
2. Если вы таки хотите сохранить содержимое вектора в двоичном файле, то делается это поэлементно и никак иначе. Для этого существуют итераторы и алгоритм for_each.
3. Если вы хотите сохранить некий сложный составной объект в файле то это опять же делается поэлементно. Т.е. вы сохраняете каждое поле вашего объекта поэлементно. И никак иначе. Если вы хотите красиво применить это в сочетании с пунктом 2 то для этого вам надо правильно перегрузить операторы << и >>. Тогда после этого вы сможете счастливо написать такое:
some_output_stream << my_complex_object;
some_input_stream >> my_complex_object;
4. STL строка, как это ни странно, тоже сложный объект и перед его сохранением в двоичный файл вместе с элементами других типов надо немного подумать головой.
5. Для того что бы правильно прочитать массив элементов из файла не мешало бы знать размер этого самого элемента и их количество
перед операцией чтения.
6. C++ это не Java. Здесь нет понятия сериализации типа данных на уровне языка (в принципе и в Java не всё так радужно). Если вам нужна эта самая сериализация то придётся делать её ручками.