Как использовать std :: copy для копирования всех элементов переменной экземпляра класса? - PullRequest
0 голосов
/ 08 мая 2019

Я получил класс под названием CANMessage, и он принимает unsigned _id, const char *_data и char _len и некоторые другие вещи, но я пропущу это:

CANMessage::CANMessage(unsigned _id, const char *_data, char _len...)

Это часть mbedAPI МОЖЕТ, но надеюсь включить только полезную информацию.Если нужно, это здесь: https://os.mbed.com/docs/mbed-os/v5.11/mbed-os-api-doxy/_c_a_n_8h_source.html

Так, например, если я создал экземпляр CANMessage примерно так:

CANMessage message;
can.read(message);      //stores a CAN frame in CANMessage

Я могу получить доступ к данным следующим образом:

  for (int i=0;i<message.len;i++) {
       pc.printf(" %02X",*(message.data+i));    //prints out the data one by one
  }

У меня есть вектор с именем sendToPc, который отправляет эти данные в определенном формате.

vector<uint8_t> sendToPc;

Таким образом, первые 4 элемента будут хранить длину, а остальные биты хранят данные.,Но я не могу понять, как скопировать в него данные, потому что не понимаю, как работает std :: copy.Я запутался в том, что здесь считают входным итератором.

std::copy(/*first input op, last input op, output operator/*)

Требуется ли указатель на эти данные?Я чувствую, что первым вводом будет message.data, но в векторе я мог бы просто сделать vect.end (), чтобы получить последний элемент, но как получить последний элемент данных в этом случае?

Я полагаю, что выходной итератор будет sendToPc.begin() + 4.

Как мне скопировать все данные сообщения экземпляра класса в мой вектор sendToPc, начиная хранилище из sendToPc [4]?

Обратите вниманиеЯ использую C ++ 98.

Редактировать: Будет ли работать вместо этого?До тех пор, пока я сначала сохраню длину ...

for (int i=0;i<message.len;i++) {
    CANdata.push_back(*(message.data+i));
}
...