将std :: copy转换为std :: memcpy不起作用?

时间:2017-03-03 00:08:26

标签: c++ arrays vector copy memcpy

我有函数将整数数组的副本复制到vector中,这与std :: copy调用工作正常,但是当我将std :: copy更改为std :: memcpy时,它无法正常工作。有人可以指出我做错了吗?

 void Walle_SSD1306::RadarD(uint8_t *RadarLL, uint8_t isFirstRadarLogo)
 {
 //Following two copy statement is working correctly
 std::copy(
    RadarLL+128
    , RadarLL + 8192
    , buffer.begin()+128
    );
 std::copy(
    RadarLL+38
    , RadarLL + 90
    , buffer.begin()+38
    );

//But when I change copy to memcpy following code is not working correctly  
std::memcpy(
     (buffer.begin()+128) , (RadarLL+128),  (8192 - 128)*sizeof(uint8_t)
    );
std::memcpy(
    (buffer.begin()+38), (RadarLL+38), (52*sizeof(uint8_t))
    );

 //where buffer is...
 std::vector<uint8_t> buffer;

2 个答案:

答案 0 :(得分:1)

std :: copy可以与迭代器一起使用并支持缓冲区重叠 memcpy仅适用于指针

答案 1 :(得分:0)

在memcpy中使用表达式buffer.begin()+128是无效的,因为通常这个表达式产生一个迭代器。

你应该使用指针。例如

std::memcpy(
     (buffer.data()+128) , (RadarLL+128),  (8192 - 128)*sizeof(uint8_t)
    );

std::memcpy(
     &buffer[128] , (RadarLL+128),  (8192 - 128)*sizeof(uint8_t)
    );