std::uninitialized_copy 和 std::copy 之间的区别?
Difference between std::uninitialized_copy & std::copy?
std::uninitialized_copy
和std::copy
之间的区别是什么?何时应该使用哪个?
假设您已经通过malloc
在堆上分配了一些内存,并有一个指向它的指针T* p
。您最终会得到未初始化的存储,因为malloc
所做的只是将您要求的大小的位置标记为已分配(另一方面,new
实际上构造了对象,从而使分配的区域初始化存储)。由于从p
开始的内存位置没有T
类型的有效对象,因此无法执行此
T a;
*p = a;
因为在p
处没有类型为T
的对象来调用上的赋值运算符。相反,您将在位置p
处使用放置new
:构造类型为T
的对象
T a;
new (p) T{a};
在处理要复制到未初始化存储的范围时,std::uninitialized_copy
只是实现了上述代码片段的范围版本。
相关文章:
- 为什么我使用 std::copy() 收到运行时错误(分段错误)?
- std::copy 导致运行时检查失败 #2
- 对于输出,std::copy是否比std::cout快
- std::copy,std::copy_backward和重叠范围
- 在结构数组上使用 c++ std::copy
- Std::copy 和 std::ostream_iterator 使用重载函数打印值
- 从 std::copy 和 std::copy_n 中提取输入迭代器
- 如何使用 std::copy 打印用户定义的类型
- Using `std::copy()` with `std::back_inserter()`
- 可以使用 std::copy 将 3D 数组复制到矢量
- 为什么在 std::copy 中使用 std::back_inserter 而不是 end()
- 如何将unique_ptr与 std::copy 一起使用
- 为什么 std::move 的行为类似于 std::copy
- 如何使用 std::copy 将一个 constexpr 数组复制到另一个 constexpr 数组
- 为什么在我的测试程序中,从字符缓冲区读取一个int时,"std::copy"5x(!)比"
- 使用back_inserter()或inserter()提高std::copy()的效率
- 用memcopy、memmove或std:copy替换For循环
- 在不使用 std::copy 函数的情况下编写这个复杂的复制结构体
- std::copy 将双精度数组复制到浮点数数组
- 编译器减少 std::copy to memcpy (memmove) 的条件是什么?