Bir API'den bir NSData * varsa ve bunu başka bir API için bir std :: vektörüne dönüştürmem gerekirse, bunu kopyalamadan güvenle yapmanın bir yolu var mı NSData'daki baytlar (çok büyük bir NSData * varsayalım)?NSData * to std :: vektör <imzasız char> Kopyalama Olmadan
cevap
Akla gelen hızlı bir çözüm yok, no. Eğer (başka API tarafından iade edilen ziyade) NSData nesnesi oluşturursanız, gerçekten kopya önlemek için gerektiğinde
, sen NSData
ve/veya NSMutableData
sınıflara düşünebilirsiniz - o zaman depolama erişebilir (std :: vektör) doğrudan.
Ayrıca senin 'tahsisi ile veri oluşturarak bazı durumlarda etrafında gizlice mümkün olabilir: elbette
NSData * data([[NSData alloc]
initWithBytesNoCopy:vector.data()
length:vector.size()
freeWhenDone:false]);
, vektör resized (veya arka olmadığından emin olmak gerekir NSData
nesnesinden ayrılmadan önce mağaza yeniden ayrıldı.
Bazen, parametre türünü std::vector
olarak değiştirmeyecek şekilde değiştirmeyi düşünmeniz gerekir. NSData
üyesi ve vektör benzeri bir arabirime sahip olan küçük bir kapsayıcı, yineleyici veya başlangıç + bitiş, diğer koleksiyon türlerini barındırırken yeterli olabilir.
Ben stl ya cpp'de hakkında yeterince bilgimiz yok, ama bir boşluktan bir vektör yapılandırmak eğer * tampon o zaman ile mümkün olmalıdır: Veri sahibi olduğunu
void * buffer = [data bytes];
size_t len = [data length];
akılda tutmak arabellek böylece serbest olmayabilir.
- 1. std :: atomic <imzasız int>
- 2. C++ empty std :: vektör,
- 3. std :: vektör öğeleri
- 4. sizeof() std :: vektör (C++)
- 5. Özelleştirici std :: vektör
- 6. Vektör <char> && vektör <char> &
- 7. C++ std :: string to boolean
- 8. Std :: vektör <uint8_t> QByteArray dönüştürmek nasıl?
- 9. Bir std :: vektör <std :: unique_ptr < int>> mülkünün
- 10. Std :: array davranışı <bool> vs. std :: vektör <bool>
- 11. iki boyutlu std :: Yani vektör
- 12. İşaretçi typedef neden std :: vector :: data()? std :: vektör API olarak
- 13. std :: vektör takas bellek parçalanmasına neden oluyor?
- 14. std :: vektör eki nasıl uygulanır? C++
- 15. C++ 11 std :: vektör eşzamanlı ortamda
- 16. , nasıl bir vektör üzerinde std :: max arayabilirim?
- 17. convert Sistem :: dizi için std :: vektör
- 18. Vektör
- 19. NSData isEqualtoData
- 20. İmzasız char *, C++ 'da std :: string dosyasına nasıl dönüştürülür?
- 21. std :: vector <std :: unique_ptr hatası < T >>
- 22. NSLog'u imzasız int ve imzasız uzun ile iOS ve OSX üzerinde uyarısı olmadan uyar
- 23. Dize Dizisi NSData, Dize Dizisine NSData Dönüştürme
- 24. Kopyalama arabelleğini temizleme (C++)
- 25. Kopyalama, kopyalama veya kopyalama UIView
- 26. Mailto: Nasıl yapılır: (to) bölümü olmadan bağlantı
- 27. std :: atomic <std :: chrono :: high_resolution_clock :: time_point>
- 28. NSData uzunluğu - Kesin dönüştürme, tamsayı kesinliğini kaybeder
- 29. std :: cin.ignore (std :: numeric_limits <std :: streamsize> :: max(), '\ n') #include kullanırken hata <Windows.h>
- 30. grid_graph öğesinden comacency_list'e kopyalama ile kopyalama :: copy_graph
Bunu yapan özel bir ayırıcı ('std :: vektör''ün ikinci şablon parametresi) oluşturabilirsiniz, ancak bunu sizin için yapacak bir kutu olduğunu düşünmüyorum. . –