我的理解是std::copy
一次复制一个元素。这似乎是必要的,以便在每个元素上触发构造函数。但是当没有这样的构造函数(例如POD)时,我认为memcpy
会更有效率。
那么,STL是否需要/允许专门化,例如,vector<int>
复制只会memcpy
?
以下问题我将非常感谢GCC / MSVC,因为那些是我使用的编译器。
list
没有意义,但string
或deque
呢?struct Point {int x, y;}
)?new
/ delete
/指针使用memcpy
来处理整数/ char /我自己的struct数组这样的包装会更快吗? ?答案 0 :(得分:7)
首先,std::copy
不会复制任何内容。 (这将是算法std::uninitialized_copy
的工作。)相反,它为旧范围的每个元素分配相应的新值。
其次,确实如此,编译器可以优化分配到memcopy中,只要结果与执行元素分配的结果相同。例如,GCC通过让编译器支持来识别这种易于复制的类型来实现这一点,而C ++ 11实际上添加了一个名为std::is_trivially_copyable
的新类型特征,这对于可以的类型是正确的memcopied。