Как я могу сделать эквивалент memcpy из необработанного массива в вектор std ::?

У меня есть класс, который имеет (среди многих других вещей )указатель на unsigned char, который удаляется и перераспределяется для хранения некоторых данных из другого массива. Это делается с помощью функции

 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, но мне это кажется крайне неэффективным.Любые предложения будут с благодарностью получены.

6
задан Component 10 20 August 2012 в 09:43
поделиться