我想序列化向量。而且我不知道如何更改向量的指针。为了简单起见,假设我有一个类似的向量:
vector<char> v;
我有这个指针:
char* c = { 'v', 'e', 'c', 't', 'o', 'r' };
我希望我的向量 v 的内部指针指向我的 char* 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 无法到达它,因为它唯一关心的是堆......好吧,这段代码现在可能对我有用:
复制(buf,buf + 5 myVvector.begin());
好吧,这也不起作用,因为我没有在我的类上使用 new 关键字,据我所知,这个向量没有被初始化。因此,如果我尝试使用 smt 复制 push_back_fill 这个向量,它会给我这个错误:
newDel.exe 中 0x00ec455b 处的未处理异常:0xC0000005:访问冲突读取位置 0x00654b4c。
这是有道理的......所以有人知道我如何从外部调用向量的构造函数/初始化器吗?