我想序列化向量。我不知道如何改变向量的指针.. 为简单起见,假设我有一个向量是这样的:C++ vector如何更改内部指针
vector<char> v;
我有这个指针:
char* c = { 'v', 'e', 'c', 't', 'o', 'r' };
而且我想我的矢量v的内部指针指向我的char * C:
&v[0] -> c
如何调整矢量,它会指向C吗?有什么办法可以做到吗?
EDIT 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());
嗯,这是不是也工作,因为我不上我的课,这个矢量,据我understan,未初始化使用new关键字。所以如果我尝试复制,push_back_fill这个载体与smt,它给了我这个错误:
0x00ec455b在newDel.exe中未处理的异常:0xC0000005:访问冲突读取位置0x00654b4c。
这是有道理的...所以任何人都知道我怎么能从外面调用构造函数/初始化矢量?
你的编辑正在做一些我认为很糟糕的事情。什么是myVector? - 但是不管它是一个字符缓冲区还是另一个向量,你都是未知行为。你可能会逃避这个,虽然'vector v(len); memcpy(&v [0],charbuffer,len);' –
2010-10-22 06:57:33
vector myvector ...以及它并不重要,这只是一个例子,而不是实际的代码。任何已知的危险? –
MCA
2010-10-22 10:59:14
“我不喜欢这部分”......个人而言,这不是我最不喜欢的部分。 – 2011-01-28 15:56:32