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