如果我有一个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的第二个模板参数),但我认为没有任何开箱即可为您做到这一点。 –