मेरे पास एक कक्षा है जिसमें कई अन्य चीजों के साथ एक हस्ताक्षर किए गए चार को पॉइंटर है जो हटा दिया जाता है और किसी अन्य सरणी से कुछ डेटा स्टोर करने के लिए पुनः आवंटित किया जाता है। यह एक समारोहमैं कच्चे सरणी से std :: वेक्टर में memcpy के बराबर कैसे कर सकता हूं?
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;
}
मैं इस कोड पसंद नहीं के साथ किया है, और मैं वास्तव में एक std::vector<unsigned char>
साथ सूचक को बदलने के लिए चाहते हैं। मेरा सवाल है, मैं memcpy पहलू कैसे प्रदर्शन करेंगे? अगर मैं अपने फ़ंक्शन के लिए तर्क के रूप में वेक्टर पास कर रहा था, तो मैं इसे इटरेटर्स का उपयोग करके कॉपी कर सकता था, लेकिन मेरे पास पैरामीटर तर्क प्रकार पर कोई नियंत्रण नहीं है इसलिए मैं unsigned char*
से फंस गया हूं। क्या इटरेटर का उपयोग करने का कोई तरीका है, या सही आकार में वेक्टर का आकार बदलना और उसके आंतरिक सरणी को एक्सेस करना ताकि मैं अभी भी memcpy
के साथ डेटा कॉपी कर सकूं? या इटरेटर का उपयोग कर बेहतर कुछ भी ?? मुझे पता है कि मैं एक लूप और push_back
का उपयोग कर सकता हूं लेकिन यह मेरे लिए दर्दनाक रूप से अक्षम है। किसी भी सुझाव आभारी रूप से प्राप्त किया जाएगा।
+1 सर्वश्रेष्ठ समाधान –
क्या यह स्वचालित रूप से वेक्टर का आकार बदल जाएगा या क्या मुझे साफ़ करना होगा और सरणी के आकार में इसका आकार सेट करना होगा? – mathematician1975
@ गणितज्ञ 1 9 75 देखें [यहां] (http://en.cppreference.com/w/cpp/container/vector/assign)। आपको स्पष्ट, आकार बदलने या कुछ भी कॉल करने की आवश्यकता नहीं है। – juanchopanza