gpt4 book ai didi

c++ - 如何将 std::vector 转换为 void*

转载 作者:可可西里 更新时间:2023-11-01 18:16:57 28 4
gpt4 key购买 nike

我想知道如何转换 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_);

但是当我运行这段代码时,我得到一个错误:

invalid cast from type ‘std::vector<image_tools::ColorData>’ to type ‘void*’

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

最佳答案

将您的 vector 转换为 void*类型,有两个选项:

  • C++11 之前的版本:(void*)&pixels_[0] (建议勾选!empty())
  • 自 C++11 起:static_cast<void*>(pixels_.data())

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

它们是类型安全的,您的代码看起来更简洁,而且大多数情况下性能都差不多。此外,与 std::memcpy 不同,它还支持非平凡可复制类型(例如 std::shared_ptr )。

记住:

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%

参见 TriviallyCopyable

更新:从 C++17 开始,您还可以使用 std::data ,这将适用于任何使用连续内存存储的容器(例如 std::vectorstd::stringstd::array )。

ColorData* buffer = std::data(pixels_);

关于c++ - 如何将 std::vector<vector> 转换为 void*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40594494/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com