草庐IT

copy-construct

全部标签

c++ - STL的copy函数的效率

我正在尝试从条目列表构建一组唯一的单词,每个条目都有一个字符串vector。所以我创建了一个名为Insert的函数,它会像这样为每个条目调用:for(auto&e:_Entries)_Dictionary.Insert(begin(e.getNameWords()),end(e.getNameWords()));_Dictionary类内部有一个集合(STL容器),我写了Insert函数如下:templatevoidInsert(InputIteratorfirst,InputIteratorlast){for(autoit=first;it!=last;++it)_AllWords.

c++ - OpenCV 子矩阵访问 : copy or reference?

如果我使用以下方法从矩阵中提取子矩阵cv::MatA=cv::Mat::ones(4,4);cv::MatB=A(cv::Rect(1,1,2,2));“B”是“A”中这些值的拷贝还是引用了这些值?能否举例说明如何获取(1)子矩阵的拷贝?(2)对子矩阵的引用? 最佳答案 B是A的Mat-header的拷贝,但引用相同的像素。因此,如果您操纵B的像素,A也会受到影响。(1)(“深拷贝”)将是:cv::Rectr(1,1,2,2);cv::MatA=cv::Mat::ones(4,4);cv::MatB=A(r).clone();//n

c++ - 他们是否将 copy_if 添加到 c++0x?

很烦人的是copy_if不在C++中。有谁知道它是否会在C++0x中? 最佳答案 由于C++0x还没有定型,只能看看最近的draft. 关于c++-他们是否将copy_if添加到c++0x?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/794320/

c++ - std::is_default_constructible<T> 错误,如果构造函数是私有(private)的

我有以下片段#include#includeclassC{C(){}};intmain(){static_assert(!boost::has_trivial_default_constructor::value,"Constructible");static_assert(!std::is_default_constructible::value,"Constructible");}条件不相等,但第一个条件工作正常,第二个构造给出错误,构造函数是私有(private)的。编译器gcc4.7...那么,这是gcc错误,还是由标准定义的?http://liveworkspace.org/

c++ - 在派生类中使用基类 Copy CTOR

我知道有很多关于这个主题的帖子,但我找不到任何帖子来完全回答我的问题。假设我有一个基类和一个派生类,我为它实现了一个CCtor和一个赋值运算符,如下所示:classBase{char*name;....Base(constBase&other):name(nullptr){*this=other}voidoperator=(constBase&other){...Deepcopyofname}}classDerived:publicBase{....Derived(constDerived&other){*this=other;}voidoperator=(constDerived&o

c++ - 关于 Copy-On-Write 和 shared_ptr 的困惑

我已经在网上搜索并通读了有关shared_ptr的Boost文档。SO上有一个响应,说写时复制(COW)的shared_ptr很糟糕,TR!已将其从字符串库中删除。大多数关于SO的建议都说使用shared_ptr而不是常规指针。该文档还讨论了使用std::unique()来制作COW指针,但我还没有找到任何示例。谈论的是拥有一个为您执行COW的智能指针,还是让您的对象对克隆对象使用新的shared_ptr然后修改克隆对象?示例:食谱和配料structNutrients;structIngredient{Ingredient(conststd::string&new_title=std:

C++为什么vector初始化会调用copy constructor

当你用下面的方式初始化一个vector时:std::vectorMyVec(10);它调用默认构造函数一次,然后再调用复制构造函数10次。所以,如果我没理解错的话,vector中的对象都是拷贝构造函数生成的。有人可以解释调用复制构造函数而不是默认构造函数的原因吗?或者甚至只是在没有对象的情况下分配内存? 最佳答案 它将分配没有对象的内存,除非您指定初始大小为10,因此它必须创建10个对象。如果你想要存储10个对象而不实际创建它们,你可以这样做:std::vectorMyVec;MyVec.reserve(10);如果你看一下你正在使

c++ - 为什么 std::allocator::construct 和 std::allocator::destroy 在元素类型上模板化?

std::allocator的construct和destroy成员函数根据要构造的元素的类型进行参数化:templateclassallocator{public:typedefTvalue_type;typedefT*pointer;templatevoidconstruct(U*p,Args&&...args);templatevoiddestroy(U*p);...};这样做的理由是什么?他们为什么不选择value_type*或pointer?好像allocator应该只知道如何构造或销毁T类型的对象. 最佳答案 这与all

c++ - std::move 和 std::copy 是否相同?

我尝试做类似的事情:std::copy(std::make_move_iterator(s1.begin()),std::make_move_iterator(s1.end()),std::make_move_iterator(s2.begin()));出现这个错误:error:usingxvalue(rvaluereference)aslvalue*__result=std::move(*__first);这让我感到困惑。如果您使用std::move,也会发生同样的事情。看起来GCC内部使用了一个名为std::__copy_move_a的函数,它move而不是复制。使用std::co

c++ - 当涉及分配器时,是否有类似于 copy-and-swap 习惯用法的东西?

关于copy-and-swap习语有几个很好的答案,例如explainingthecopyandswapidiom和explainingmovesemantics.适用于复制和移动分配的基本习惯用法如下所示:T&T::operator=(Tother){this->swap(other);return*this;}此作业适用于复制和移Action业,因为other复制或移动构造取决于赋值的右侧是左值还是右值。现在让有状态分配器进入画面:ifT在分配器类型上进行参数化,例如std::vector,上面的成语并不总是有效!具体来说,std::allocator_traits包含三种类型,指