Я хотел бы сериализовать вектор. И я не знаю, как изменить указатель вектора ..
Для простоты, скажем, у меня есть вектор что-то вроде:
vector<char> v;
И у меня есть этот указатель:
char* c = { 'v', 'e', 'c', 't', 'o', 'r' };
И мне бы хотелось, чтобы внутренний указатель моего вектора v указывал на мой символ * c:
&v[0] -> c
Как мне отрегулировать вектор так, чтобы он указывал на c? Есть ли способ сделать это?
РЕДАКТИРОВАТЬ 22.10.2010
Так, ребята,
после отладки вектора я придумал это решение:
vector<char> dump;
memcpy(&myVector, &dump, sizeof(myVector)); // I change contents so it can work
myVector.assign(buf, buf+5); // copy contents into it from buffer (I don't like this part)
И для работы мне нужно было определить
_ITERATOR_DEBUG_LEVEL=0
потому что изначально он установлен в 2 и фактически выполняет проверку отладки (я думаю) Это не определено в режиме выпуска, верно? Так что это мой обходной путь, я хотел бы заставить ppl удалить вектор в долгосрочной перспективе ... Так, ребята, что вы думаете об этом решении? А опасности ты видишь?
Мне действительно нужно сериализовать вектор с помощью memcpy. Я хочу сериализовать весь мой класс (например, сделать снимок памяти) и записать его в файл, а при перезагрузке прочитать его из файла и восстановить объект как без вызова его конструктора и использования оператора new.
Хм, этот векторный контейнер находится в стековой памяти, поэтому memcpy не может его достать, так как его беспокоит только куча ... Ну, этот фрагмент кода может работать для меня сейчас:
copy (buf, buf + 5 myVvector.begin ());
Ну, это тоже не работает, так как я не использую ключевое слово new в своем классе, этот вектор, насколько я понимаю, не инициализирован. Так что, если я попытаюсь скопировать, push_back_fill этот вектор с smt, это выдаст мне эту ошибку:
Необработанное исключение в 0x00ec455b в newDel.exe: 0xC0000005: Место чтения нарушения прав доступа 0x00654b4c.
что имеет смысл ... Кто-нибудь знает, как я могу вызвать конструктор / инициализатор вектора извне?