【发布时间】:2016-11-14 17:28:31
【问题描述】:
我想知道如何将std::vector<vector> 转换为void*,例如:
std::vector<ColorData> pixels_ (w*h, background_color);
现在我想将pixels_ 转换为void*,这样我就可以将memcpy 转换为pixels_。
memcpy ((void*)destinationBuffer->pixels_, (void*)sourceBuffer->pixels_, \
sizeof(ColorData)*destinationBuffer->width_*destinationBuffer->height_);
但是当我运行这段代码时,我收到一条错误消息:
从类型“std::vector<:colordata>”到类型“void*”的无效转换
如何将std::vector<vector> 转换为void*?
【问题讨论】:
-
为什么不定期复制向量呢?如果它是 POD 类型,许多实现将在内部调用 memcpy。这对我来说似乎是一个过早的优化。
-
... 或 &*sourceBuffer.pixels.begin() 或 &sourceBuffer.pixels.front()。
-
在 c++11 中,您有
.data()函数来获取指向基础数据的指针。否则你可以做&vec[0]。但这只是在你真的必须这样做的情况下,因为通常有更好的方法(例如提到的 std::copy)。