大佬教程收集整理的这篇文章主要介绍了c – allocator.construct循环是否等于std :: uninitialized_copy?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一块allocator.allocate(n)获得的内存.我还有一个T对象的容器con(例如,std :: vector< T>).我想用T对象初始化那块内存.
存储块的位置存储在T *数据中.
这两个代码示例是否始终相同?
@H_502_8@#include <memory> // example 1 std::uninitialized_copy(con.begin(),con.end(),data) // example 2 std::vector<T>::const_iterator in = con.begin(); for (T* out = data; in != con.end(); ++out,++in) { allocator.construct(out,*in); }对于这两个?
@H_502_8@#include <memory> T val = T(); // Could be any T value // example 3 std::uninitialized_fill(data,data + n,val) // example 4 for (T* out = data; out != (data + n); ++out) { allocator.construct(out,val); }编辑:好的,C 03标准在第20.1.5节§2表32中说明,构造(p,t)应该与new((void *)p)T(t)具有相同的效果(对于任何符合标准的分配器),而不仅仅是std :: allocator).在20.4.4.1§1中,uninitialized_copy应该具有相同的效果
@H_502_8@for (; first != last; ++result,++first) new (static_cast<void*>(&*result)) typename iterator_Traits<ForWARDIterator>::value_type(*first);在20.4.4.2§1中,uninitialized_fill具有的效果
@H_502_8@for (; first != last; ++first) new (static_cast<void*>(&*first)) typename iterator_Traits<ForWARDIterator>::value_type(X);所以我认为这并没有为他们留下任何不同的行为空间.所以回答你的问题:是的,确实如此.
以上是大佬教程为你收集整理的c – allocator.construct循环是否等于std :: uninitialized_copy?全部内容,希望文章能够帮你解决c – allocator.construct循环是否等于std :: uninitialized_copy?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。