从
的第一个元素的memoryadress中记忆myvect.size()* sizeof(foo)字节是否安全?std::vector<std::pair<T1, T2> > myvect
进入
数组struct foo{
T1 first;
T2 second;
}
如果为数组分配的元素数与向量的大小相同?
感谢
答案 0 :(得分:8)
不,包含T1
和T2
的类不能保证与std::pair<T1, T2>
具有相同的布局或对齐方式,至少在C ++ 98中是这样(因为std::pair
不是一种POD类型)。 C ++ 0x中的故事可能有所不同。
答案 1 :(得分:4)
您未提出的问题的答案可能是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);
答案 2 :(得分:0)
一般来说,没有。在某些平台/编译器/ STL实现上它可能是,但不管怎么说都不这样做。您将依赖于两个对的实现细节&lt;&gt;和矢量&lt;&gt;。
我自己犯了依赖vector&lt;&gt;的罪是一个连续的阵列。为此,我深深地忏悔。但该对&lt;&gt; ...只是说不。