c ++ std :: pair,std :: vector&memcopy

Mat*_*Mat 8 c++ vector memcpy std-pair

从第一个元素的memoryadress中记忆myvect.size()*sizeof(foo)字节是否安全?

std::vector<std::pair<T1, T2> > myvect
Run Code Online (Sandbox Code Playgroud)

成阵列

struct foo{
    T1 first;
    T2 second;
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Chr*_*ung 8

不,包含T1并且T2不保证与std::pair<T1, T2>至少在C++ 98中相同的布局或对齐的类(因为std::pair它不是POD类型).C++ 0x中的故事可能有所不同.

  • 这就是为什么std :: copy不仅仅是纯粹主义者感兴趣的原因 - 它复制非POD数据. (3认同)
  • 实际上,有些编译器为`std :: copy()`创建了比`std :: memcpy()`_better_的代码 - `std :: copy()`的特化很容易受到类型对齐限制的影响.例如,`std :: copy <double*>`可以使用64位对齐读/写而无需事先检查. (2认同)