Is there any shortcut to convert from std::vector<T>
to std::vector<T*>
or std::vector<T&>
?
Essentially I want to replace:
std::vector<T> source;
std::vector<T*> target;
for(auto it = source.begin(); it != source.end(); it++)
{
target.push_back(&(*it));
}
with a single line.
To provide some context: I have one set of functions which do their computation on a std::vector<Polygon>
and some which require std::vector<Polygon*>
. So I need to convert back and forth a couple of times, because the interface of these functions is not supposed to change.
Although what you describe sounds strange (without context), using std::transform
you could do the actual copying/transformation in one line of code :
transform(source.begin(), source.end(), target.begin(), getPointer);
given that target
has sufficient room for all data (can be achieved with std::vector::resize
eg.), and given this unary operator :
template<typename T> T* getPointer(T& t) { return &t; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With