【问题标题】:Extract uint8_t* subset from a vector<uint8_t>从向量中提取 uint8_t* 子集<uint8_t>
【发布时间】:2020-05-07 20:08:24
【问题描述】:

我有一个vector&lt;uint8_t&gt;,我正在与一个需要uint8_t* data, size_t size 的api 交互。我需要为 api 提供我的向量的一个子集,在我当前的解决方案中,我使用向量构造函数创建一个子集,然后我将这个新向量的 data() 传递给 api:

vector<uint8_t> subset(bytes.begin() + offset, bytes.begin() + offset + size);
api(subset.data(), subset.size());

这在大多数情况下都可以正常工作,但在受限设备上内存不足。有没有更有效的方法从vector&lt;uint8_t&gt; 中提取 uint8_t* 子集?

【问题讨论】:

    标签: c++ c++17


    【解决方案1】:

    是的,只需将两者结合起来,但使用 data 而不是 begin

    api(bytes.data() + offset, size);
    

    使用下标和地址运算符也可以

    api(&bytes[offset], size);
    

    【讨论】:

    • @Artyer 以 OP 为例,size 是传递给 API 的字节范围的完整大小,因此不应从其中减去 offset。这只有在 sizevector 的全尺寸时才有意义。
    • @Artyer size是范围的大小,原代码两边加上偏移量。
    【解决方案2】:

    我认为您不需要创建一个子集,传递向量的第一个元素和大小即可从中取出。确保此大小小于等于 bytes.size()

    api(&bytes[0],size);
    

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      相关资源
      最近更新 更多