从 a 的第一个元素的内存地址中复制 myvect.size()*sizeof(foo) 个字节是否安全
std::vector<std::pair<T1, T2> > myvect
成一个数组
struct foo{
T1 first;
T2 second;
}
如果数组分配的元素数量与向量的大小相同?
谢谢
不,至少在 C++98 中(因为不是 POD 类型),包含T1
and的类T2
不能保证与 相同的布局或对齐方式。在 C++0x 中,情况可能会有所不同。std::pair<T1, T2>
std::pair
您没有问的问题的答案可能是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());
或者std::copy
,但是给 foo 一个operator=
以一对作为参数的值。这假设您可以重写 foo,但是:
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);
一般来说,没有。在某些平台/编译器/STL 实现上可能是这样,但无论如何都不要这样做。您将依赖pair<> 和vector<> 的实现细节。
我自己犯了依赖 vector<> 作为连续数组的罪过。为此,我深深忏悔。但是这对<>...只是说不。