首页 > 解决方案 > 如何使用 std::copy 复制类实例变量的所有元素?

问题描述

我有一个名为 CANMessage 的类,它包含unsigned _id,const char *_datachar _len其他一些东西,但我会跳过它:

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

它是 mbed API CAN 的一部分,但我希望只包含有用的信息。如果需要,它在这里: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));
}

标签: c++c++98

解决方案


推荐阅读