İmzalı olan ve başka bir diziden bazı verileri depolamak üzere yeniden tahsis edilen imzasız char işaretçisine sahip bir sınıfım var. Bu Ben bu kod sevmiyorum bir fonksiyonuBir ham dizideki memcpy eşdeğerini std :: vektörüne nasıl yapabilirim?
class MyClass {
private:
unsigned char* m_Buffer;
int m_BufferSize;
public:
bool SetBuffer(int iSize, const unsigned char* pArray);
};
bool MyClass::SetBuffer(int iSize, const unsigned char* pArray) {
bool bOK = false;
if (pArray != NULL && iSize > 0) {
delete [] m_Buffer;
m_Buffer = new unsigned char[iSize];
memcpy(m_Buffer,pArray,iSize);
m_BufferSize = iSize;
bOK = true;
}
return bOK;
}
ile yapılır ve gerçekten bir std::vector<unsigned char>
ile işaretçi değiştirmek istiyoruz. Sorum şu, memcpy özelliğini nasıl uygularım? Bir vektörü işlevimin argümanı olarak geçiriyorsam, yineleyicileri kullanarak kopyalayabilirdim, ancak parametre argümanı türü üzerinde hiçbir kontrolüm yok, bu yüzden unsigned char*
ile sıkışıp kaldım. Yineleyicileri kullanmanın veya vektörü doğru boyuta sığdırmanın ve sonra iç dizisine erişmenin bir yolu var mı? Böylece verileri memcpy
ile kopyalayabilir miyim? Ya da yineleyiciler kullanarak daha iyi bir şey? Bir döngü ve push_back
kullanabileceğimi biliyorum ama bu bana acı vericidir. Herhangi bir öneri minnetle alınacaktır.
+1 En iyi çözüm –
Bu otomatik olarak vektörü yeniden boyutlandıracak mı yoksa net olarak çağırmalı ve boyutunu dizinin boyutuna göre ayarlamalı mıyım? – mathematician1975
@ mathematician1975 bakınız [burada] (http://en.cppreference.com/w/cpp/container/vector/assign). Net, yeniden boyutlandırmak veya herhangi bir şey aramak zorunda değilsiniz. – juanchopanza