Tôi có một lớp có (trong số rất nhiều thứ khác) một con trỏ tới unsigned char bị xóa và được phân bổ lại để lưu trữ một số dữ liệu từ một mảng khác. Việc này được thực hiện với chức năngLàm thế nào tôi có thể làm tương đương với memcpy từ một mảng thô đến một std :: vector?
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;
}
Tôi không thích mã này, và tôi thực sự muốn thay thế con trỏ bằng std::vector<unsigned char>
. Câu hỏi của tôi là, tôi sẽ thực hiện khía cạnh memcpy như thế nào? Nếu tôi đã đi qua một vector như là đối số cho chức năng của tôi, tôi có thể sao chép nó bằng cách sử dụng vòng lặp, nhưng tôi không có quyền kiểm soát đối số tham số loại vì vậy tôi bị mắc kẹt với unsigned char*
. Có cách nào để sử dụng trình vòng lặp hay định cỡ vectơ đúng kích cỡ và sau đó truy cập mảng nội bộ của nó sao cho tôi vẫn có thể sao chép dữ liệu với memcpy
? Hoặc thậm chí tốt hơn một cái gì đó bằng cách sử dụng iterators ?? Tôi biết tôi có thể sử dụng một vòng lặp và push_back
nhưng điều đó dường như không hiệu quả với tôi. Bất kỳ lời đề nghị sẽ được biết ơn.
+1 Giải pháp tốt nhất –
Điều này sẽ tự động thay đổi kích thước véc tơ hoặc tôi có phải gọi rõ ràng và đặt kích thước của nó thành kích thước của mảng không? – mathematician1975
@ mathematician1975 xem [tại đây] (http://en.cppreference.com/w/cpp/container/vector/assign). Bạn không cần phải gọi rõ ràng, thay đổi kích thước hoặc bất cứ điều gì. – juanchopanza