我想序列化向量。我不知道如何改變向量的指針.. 爲簡單起見,假設我有一個向量是這樣的: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