【问题标题】:Need to convert std::vector<ButtonElement> buttonList to std::vector<BYTE> byteVector需要将 std::vector<ButtonElement> buttonList 转换为 std::vector<BYTE> byteVector
【发布时间】:2020-02-08 00:28:32
【问题描述】:

我需要将 std::vector buttonList 转换为 std::vector byteVector。 我用这个做到了 memcpy(&byteVector, &buttonList, buttonList.size() * sizeof(TenderButtonList_Element));

但我的一位前辈提到它不是正确使用 STL,但没有确切说明它是什么。我怀疑 memcpy 不应该用于向量。上述转换是否有效,我观察到它达到了目的,但想知道它是否有效。如果不是,你能指出正确的方法吗?

【问题讨论】:

  • 无效。

标签: c++ stl


【解决方案1】:

如果不是,你能指出正确的方法吗?

这取决于您要完成的任务。

你有一个TenderButtonList_Element 的序列(vector),对吧?

您希望生成包含与第一个序列相同的位模式的字节序列?对吗?

如果这就是你所追求的,那么你想要这样的东西:

vector<std::byte> vBytes;
vBytes.resize(buttonList.size() * sizeof(TenderButtonList_Element));
memcpy(vBytes.data(), buttonList.data(), vBytes.size());

如果你想要别的东西,那么你需要说出那是什么。

请注意,一般情况下,memcpy-ing c++ 对象周围不会产生有效对象。

【讨论】:

  • vBytes.size();
  • 感谢您的回复,这正是我所需要的。您能否简要解释一下注释部分背后的原因:“memcpy-ing c++ objects around does not generate valid objects”
  • 一个例子:一个向量包含一个指向一些分配内存的指针。这在构造函数中分配(粗略地说),并在析构函数中释放。如果你将一个向量 memcpy 到另一个向量中,你有两个对象引用相同的分配内存,每个对象都认为它应该在销毁时释放该内存。
猜你喜欢
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 2016-03-31
  • 2023-03-23
  • 2020-12-07
  • 2020-12-09
  • 1970-01-01
  • 2020-06-20
相关资源
最近更新 更多