C ++使用memcpy填充结构中的向量

时间:2013-05-06 11:36:14

标签: c++ struct memcpy

我想用memcpy填充结构。

结构声明如下:

struct udtFeatures
{
    vector<unsigned char>ByteFeatures;
};

这就是我要填充字节的地方:

void clsMapping::FeedFeaturesFromMap(udtFeatures &uFeatures,int uOtherIndex)
{
    int iBytePos=this->Content()[uOtherIndex].ByteStart;
    int iByteCount=this->Content()[uOtherIndex].ByteCount;

    memcpy(uFeatures.ByteFeatures, &((char*)(m_pVoiceData))[iBytePos],iByteCount);
}

然而memcpy不喜欢这个。

编译器说:

找不到

的匹配转换功能
std::vector<unsigned char, std::allocator<unsigned char>> in void *.

我猜是因为它.ByteFeatures只是一个指针?

我怎么能这样做?

4 个答案:

答案 0 :(得分:5)

  

我猜是因为它.ByteFeatures只是一个指针?

不,这是因为不是只是一个指针。这是一个载体。

  

我怎么能这样做?

如果你想要一个指向矢量管理的数组的指针,那就是uFeatures.ByteFeatures.data()&uFeatures.ByteFeatures[0]。或者,您可以考虑使用std::copy代替。

在任何一种情况下,确保向量足够大,然后再将其复制到其中。

答案 1 :(得分:0)

可以使用memcpy初始化std::vector,但不建议。

而是使用std::copy

std::copy(&m_pVoiceData[iBytePos], &m_pVoiceData[iBytePos + iByteCount],
          std::back_inserter(uFeatures.ByteFeatures));

答案 2 :(得分:0)

你不能使用memcpy来填充std::vector(嗯......有办法,但你最好还是把它想象一下)。使用std::copy或自行填写。

答案 3 :(得分:0)

uFeatures.ByteFeatures应为&uFeatures.ByteFeatures[0]