简体   繁体   中英

how to convert std::vector<vector> to void*

I am wondering how can I convert std::vector<vector> to void* , for example:

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

Now I want to convert pixels_ to void* so that I can memcpy the pixels_ .

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

But when I run this code, I get an error which says:

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

How can I convert std::vector<vector> to void* ?

To transform your vector into a void* type, there are two options:

  • Pre C++11: (void*)&pixels_[0] ( !empty() check is recommended)
  • Since C++11: static_cast<void*>(pixels_.data())

However, if you want to copy the elements, go straight with STL functions:

They are type safe, your code looks much cleaner and the performance will be on par most of the times. Also, unlike std::memcpy , it also supports non-trivially copyable types (for example std::shared_ptr ).

Remember:

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%

See TriviallyCopyable

Update: since C++17 you can also use std::data , which will work for any container using contiguous memory storage (eg std::vector , std::string , std::array ).

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM