is it safe to memcopy myvect.size()*sizeof(foo) bytes from the memoryadress of the first element of a
std::vector<std::pair<T1, T2> > myvect
into an array of
struct foo{
T1 first;
T2 second;
}
if the array is allocated with the same number of elements as the vector's size?
thanks
A pair is a container which stores two values mapped to each other, and a vector containing multiple number of such pairs is called a vector of pairs.
std::pair is a class template that provides a way to store two heterogeneous objects as a single unit. A pair is a specific case of a std::tuple with two elements.
No, a class containing T1
and T2
is not guaranteed the same layout or alignment as std::pair<T1, T2>
, at least in C++98 (since std::pair
is not a POD type). The story may be different in C++0x.
The answer to the question you didn't ask is probably std::transform
:
struct pairToFoo {
// optionally this can be a function template.
// template<typename T1, typename T2>
foo operator()(const std::pair<T1,T2> &p) const {
foo f = {p.first, p.second};
return f;
}
};
std::transform(myvect.begin(), myvect.end(), myarray, pairToFoo());
Or std::copy
, but give foo an operator=
taking a pair as parameter. This assumes you can re-write foo, though:
struct foo {
T1 first;
T2 second;
foo &operator=(const std::pair<T1,T2> &p) {
first = p.first;
second = p.second;
return *this;
}
};
std::copy(myvect.begin(), myvect.end(), myarray);
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