我有一個內存,我使用char * p
來訪問它。將char *轉換爲向量C++
我想引用它。我如何製作它?
vector<char>& v = p
什麼我需要做的,而不是p來將其轉換爲載體,我也需要告訴它我在內存使用的char *的大小。
我有一個內存,我使用char * p
來訪問它。將char *轉換爲向量C++
我想引用它。我如何製作它?
vector<char>& v = p
什麼我需要做的,而不是p來將其轉換爲載體,我也需要告訴它我在內存使用的char *的大小。
很難回答這個問題沒有更多的信息,但我會嘗試。最直接的解決方案可能是將p轉換爲正確類型的指針,然後構造一個新的向量。如果你想要一個字符向量:
std::vector<char> wewvec(p,p+20)
其中20是你會給元素的數量。也就是說,如果數據真的是字符。
如果數據是一些其他類型的,比如說它含有20個飄浮,你可以這樣做:
const float* pf=reinterpret_cast<const float*>(p);
std::vector<float> wewvec(pf,pf+20)
迪特里希寫道,這將副本數據到新的載體。
['錯誤:從'const char *'類型無效的static_cast類型'const float *''](https://ideone.com/EnAOIu) –
謝謝,這很令人尷尬。應該是reinterpret_cast。 https://ideone.com/ox5Uxz –
如果你有一個指針p指向一個內存塊
char* p = new char[100];
可以通過編寫
char& q = *p;
如果你使用vector
,你將需要複製的容器創建對它的引用作爲約翰說的向量的內容
是的,我試圖找到一種方式,而不復制它 –
@Boris:這是一個非首發。 –
基本上:
一個向量擁有它的內存,它不只是引用它。所以你可以創建一個新的向量來複制你的數據,但是你不能讓載體「獲取」你的指針並使用它。
如果你必須有一個載體傳遞到第三方API和你有一個指針,你將不得不作出一個副本
如果你是在API的控制,你可以改變它採取一系列的指針(開始/結束)或指針和大小。這樣,如果你已經有一個向量,你仍然可以訪問這些函數(雖然你不能指望begin()
和end()
給你指針,但有一些方法可以使用&v[0]
作爲指針,然後將該大小添加到該指針)。
如果你只需要將數據放入標準算法中,就可以使用指針來做到這一點。
顯然,您不能執行修改數據大小的矢量操作,例如如果有指針,則爲push_back。但是,因爲您有char*
而不是const char*
,您可以修改成員。
「std :: vector」不可能使用對現有內存的引用。你可以在'std :: vector'創建後引用內存,或者你可以用內存中的數據內容初始化'std :: vector'。 –
你想要什麼樣的矢量?在指向的位置有什麼樣的數據?沒有更多的信息很難回答這個問題,但最直接的解決方案可能是將p轉換爲正確類型的指針,然後使用std :: vector wewvec(p,p + 20)等構造一個新的向量。是,如果數據真的是char。 –
你打算如何處理參考?爲什麼你不能只用p?如:p [3],? –