Tôi đã tìm kiếm về chủ đề này và tôi thấy rất nhiều cách để chuyển đổi một mảng [] để một std :: vector, như sử dụng:Sao chép một mảng thành một std :: vector
assign(a, a + n)
hoặc trực tiếp tại các nhà xây dựng:
std::vector<unsigned char> v (a, a + n);
những giải quyết vấn đề của tôi, nhưng tôi tự hỏi nếu nó là có thể (và chính xác) để thực hiện:
myvet.resize(10);
memcpy(&myvet[0], buffer, 10);
tôi tự hỏi này bởi vì tôi có đoạn mã sau:
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;
}
Và tôi muốn làm:
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;
}
(Tôi đã gỡ bỏ điều trị lỗi của hàm ReadFile để đơn giản hóa các bưu điện).
Nó đang hoạt động, nhưng tôi e rằng nó không an toàn. Tôi tin rằng nó là ok, như bộ nhớ được sử dụng bởi các vector là liên tục, nhưng tôi đã không bao giờ nhìn thấy một người nào đó bằng cách sử dụng vectơ theo cách này.
Có đúng không khi sử dụng các vectơ như thế này? Có lựa chọn nào khác tốt hơn không?
Anh * * thay đổi kích thước đầu tiên (xem dòng đầu tiên của hàm). – celtschk
Tôi đã không ngụ ý rằng ông đã không làm như vậy. Tôi chỉ nhấn mạnh tầm quan trọng của nó. – TheBuzzSaw
Bạn có thể không có * có nghĩa là * để ngụ ý nó, nhưng bạn đã làm. – celtschk