8

从 a 的第一个元素的内存地址中复制 myvect.size()*sizeof(foo) 个字节是否安全

std::vector<std::pair<T1, T2> > myvect

成一个数组

struct foo{
    T1 first;
    T2 second;
}

如果数组分配的元素数量与向量的大小相同?

谢谢

4

3 回答 3

8

不,至少在 C++98 中(因为不是 POD 类型),包含T1and的类T2不能保证与 相同的布局或对齐方式。在 C++0x 中,情况可能会有所不同。std::pair<T1, T2>std::pair

于 2010-01-05T22:21:17.863 回答
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);
于 2010-01-06T01:03:28.177 回答
0

一般来说,没有。在某些平台/编译器/STL 实现上可能是这样,但无论如何都不要这样做。您将依赖pair<> 和vector<> 的实现细节。

我自己犯了依赖 vector<> 作为连续数组的罪过。为此,我深深忏悔。但是这对<>...只是说不。

于 2010-01-05T22:22:42.043 回答