मैं इस विषय के बारे में खोज रहा था और मैं एक एसटीडी करने के लिए एक सरणी [] परिवर्तित करने के लिए कई मायनों :: वेक्टर, का उपयोग कर की तरह पाया में एक सरणी को कॉपी करना:एक std :: वेक्टर
assign(a, a + n)
या, में प्रत्यक्ष निर्माता:
std::vector<unsigned char> v (a, a + n);
उन मेरी समस्या का समाधान है, लेकिन अगर यह संभव है (और सही) है मैं सोच रहा हूँ करने के लिए:
myvet.resize(10);
memcpy(&myvet[0], buffer, 10);
मैं सोच रहा हूँ इस वजह से मैं निम्नलिखित कोड है:
IDiskAccess::ERetRead nsDisks::DiskAccess::Read(std::vector<uint8_t>& bufferRead, int32_t totalToRead)
{
uint8_t* data = new uint8_t[totalToRead];
DWORD totalRead;
ReadFile(mhFile, data, totalToRead, &totalRead, NULL);
bufferRead.resize(totalRead);
bufferRead.assign(data, data + totalRead);
delete[] data;
return IDiskAccess::READ_OK;
}
और मैं क्या करना चाहते हैं:
IDiskAccess::ERetRead nsDisks::DiskAccess::Read(std::vector<uint8_t>& bufferRead, int32_t totalToRead)
{
bufferRead.resize(totalToRead);
DWORD totalRead;
ReadFile(mhFile, &bufferRead[0], totalToRead, &totalRead, NULL);
bufferRead.resize(totalRead);
return IDiskAccess::READ_OK;
}
(मैं ReadFile फ़ंक्शन की त्रुटि उपचार को हटा दिया है पद सरल करने के लिए)।
यह काम कर रहा है, लेकिन मुझे डर है कि यह सुरक्षित नहीं है। मेरा मानना है कि यह ठीक है, क्योंकि वेक्टर द्वारा उपयोग की जाने वाली स्मृति निरंतर है, लेकिन मैंने कभी इस तरह वैक्टर का उपयोग करके किसी को नहीं देखा है।
क्या इस तरह के वैक्टरों का उपयोग करना सही है? क्या कोई और बेहतर विकल्प है?
वह * पहले * आकार बदलता है (उसके फ़ंक्शन की पहली पंक्ति देखें)। – celtschk
मैं यह नहीं कह रहा था कि वह ऐसा करने में असफल रहा। मैं बस इसके महत्व पर जोर दे रहा था। – TheBuzzSaw
आपके पास इसका मतलब यह नहीं था * लेकिन * आपने किया था। – celtschk