如何将std :: vector <vector>转换为void *

时间:2016-11-14 17:28:31

标签: c++ stdvector

我想知道如何将std :: vector转换为void *,例如,

std::vector<ColorData> piexls_ (w*h, background_color);

现在我想将piexls_转换为(void *),以便我可以记忆像素_。

memcpy ((void*)destinationBuffer->pixels_, (void*)sourceBuffer->pixels_, \
sizeof(ColorData)*destinationBuffer->width_*destinationBuffer->height_);

但是当我运行此代码时,我收到的错误是invalid cast from type ‘std::vector<image_tools::ColorData>’ to type ‘void*’

如何将std :: vector转换为void *。非常感谢你!

1 个答案:

答案 0 :(得分:15)

要将矢量转换为void*类型,有两种选择:

  • Pre C ++ 11:(void*)&piexls_[0](建议!empty()检查)
  • 从C ++ 11开始:static_cast<void*>(piexls_.data())

但是,如果要复制元素,请直接使用STL函数:

它们是类型安全的,您的代码看起来更干净,并且大多数时候性能都会相同。

记住:

  

我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源。然而,我们不应该在那个关键的3%

中放弃我们的机会

请参阅TriviallyCopyable