如果我有一個API的NSData *,需要將它轉換爲另一個API的std :: vector,有沒有辦法在不復制的情況下安全地執行此操作NSData中的字節(假設非常大的NSData *)?NSData * to std :: vector <unsigned char>不帶複製
6
A
回答
4
想到沒有快速解決方案,沒有。如果你創建NSData對象(而不是由另一個API返回),你可能會考慮繼承NSData
和/或NSMutableData
,當你真的需要避免複製 - 那麼你可以訪問存儲(std ::矢量)直接。
您可能還可以圍繞它偷偷在某些情況下,通過創建一個「你」分配數據:
NSData * data([[NSData alloc]
initWithBytesNoCopy:vector.data()
length:vector.size()
freeWhenDone:false]);
當然
,你需要確保矢量沒有調整(或它的後盾存儲重新分配)之前NSData
對象被釋放。
有時您還需要考慮更改參數類型,以使其不是std::vector
。一個包含NSData
成員和向量類接口,迭代器或begin + end的小容器在適應其他集合類型時可能已足夠。
1
我不知道有足夠的瞭解STL或CPP,但如果你能構建從虛空矢量*緩衝區,那麼你應該能夠有:
void * buffer = [data bytes];
size_t len = [data length];
記住,數據擁有緩衝區,所以你可能無法釋放它。
相關問題
- 1. std :: vector <float> to std :: vector <glm::vecX>沒有複製
- 2. cast vector <unsigned char> to uint8_t *
- 3. std ::在std :: string和std :: vector之間移動<unsigned char>
- 4. 方便地將std :: vector <unsigned char>複製到輸入流(std :: istream)對象
- 5. 如何將std :: vector <unsigned short>轉換爲std :: vector <int>?
- 6. boost :: transitive_closure()and「error:no matching function for call to'vertices(const std :: vector <std :: vector <long unsigned int> ...」
- 7. iterate std :: vector <std :: vector <char>>?
- 8. NSMutableArray to std :: vector
- 9. 從std :: istreambuf_iterator <>複製到std :: vector <>
- 10. std :: vector <std :: vector <T>> vs std :: vector <T*>
- 11. 展開std :: vector <std :: vector <T>>轉換爲std :: vector <T>
- 12. 將std :: map <int,vector <int>>複製到std :: map <std:string,vector <int>>
- 13. 使用unicode字符串作爲std :: vector <unsigned short>
- 14. 調用'(std :: pair <unsigned int,unsigned int>)(unsigned int&,unsigned int)'
- 15. 如何將std :: vector <unsigned char>轉換爲矢量<char>而不進行復制?
- 16. 解引用不能用於std :: vector <std :: vector <double>>
- 17. 將std :: vector <unsigned int>解釋爲bitvector - 高效算法?
- 18. convert <vector><string> TO <vector><int> C++,Win32
- 19. 什麼是「std :: vector <unsigned char>數據=示例」?
- 20. 將std :: vector複製到std :: array
- 21. C++ std :: vector <std :: shared_ptr>
- 22. 如何將const std :: vector <unsigned char>轉換爲char
- 23. boost :: python:python list to std :: vector
- 24. std :: vector <T>
- 25. 如何在不復制的情況下更新std :: unordered_map <std :: string,std :: vector <int>>中的向量?
- 26. 從std :: vector讀取二進制數據的最簡單方法<unsigned char>?
- 27. 將std :: vector <std :: vector <float>>轉換爲float **
- 28. 如何將std :: vector <const char*>複製到void *?
- 29. std :: sort on std :: vector <std::string>
- 30. 如何從std :: vector <>
您可能可以創建一個自定義分配器(std :: vector的第二個模板參數),但我認爲沒有任何開箱即可爲您做到這一點。 –