草庐IT

c++ - g++ 4.9.3 提示 friended ctor 对 .emplace_back() 是私有(private)的,但喜欢 .push_back()

我肯定遗漏了关于emplace()和friend的其中一个优点。这是一个完整的最小示例,它重现了g++4.9.3的问题:classFoo{public:classBar{private:friendclassFoo;Bar(Foo&foo):foo(foo){}Foo&foo;};Bar&getBar(){//bars.push_back(*this);//worksfinebars.emplace_back(*this);//Foo::Bar::Bar(Foo&)isprivatereturnbars.back();}private:std::vectorbars;};

c++ - push_back 与 emplace_back 到 std::vector<std::string>

类似的问题存在于here和here但我认为我们还没有得到明确的答案然后我重新提出问题。C++11标准有两种在vector末尾添加新元素的方法,它们是std::vector::push_back和std::vector::emplace_back.它们之间的区别在于std::vector::emplace_back就地构造对象而std::vector::push_back基本上复制对象(或原语类型)或将其移动到vector的末尾。然后std::vector::push_back看起来是将原始类型添​​加到std::vector中的更好选择。例如:std::vectorvVec;vVec.

c++ - <queue> 的 emplace 和 push 的区别

之间有什么区别?的安置和插入?这里是关于std::queue::emplace的解释和std::queue::push.这两种方法都在其当前最后一个元素之后添加元素,返回None. 最佳答案 push()将已构造对象的拷贝作为参数添加到队列中,它采用队列元素类型的对象。emplace()在队列末尾就地构造一个新对象。它将队列的元素类型构造函数采用的参数作为参数。如果您的使用模式是创建一个新对象并将其添加到容器中,则可以使用emplace()简化几个步骤(创建一个临时对象并复制它)。例子#include#includeusingnam

c++ - 我可以使用 always emplace 代替 insert 来插入单个元素吗?

我想知道在向STL容器中插入单个元素(如set、unordered_set)时,是否始终使用emplace来替换insert是否可以?从签名来看,emplace比较简单,不涉及重载。停止使用insert并一直使用emplace有什么问题吗?注意:有很多问题询问emplace和insert/push_back等之间的区别(例如here、here和here)我理解其中的区别,而且在我看来emplace在各个方面都更好。我只是想确认是否可以弃用insert。 最佳答案 有一些例子here可以适应emplace和insert,显示行为可能不

c++ - C++ 中 vector 的 insert 和 emplace 有什么区别

这个问题在这里已经有了答案:push_backvsemplace_back(7个答案)C++std::vectoremplacevsinsert[duplicate](2个答案)关闭9年前。除了使用emplace的单次插入和使用insertinvector的多次插入外,它们的实现还有其他区别吗?在这两种情况下,插入任何元素都会移动所有其他元素。

c++ - 使用默认构造函数在 vector 中放置

我想使用vector::emplace默认构造一个不可复制和不可分配对象,然后使用特定方法对象使用迭代器指向新创建的对象。请注意,该类没有参数化构造函数,只有默认构造函数。一个简单的例子是:#include#includeusingnamespacestd;classTest{public:Test(){}private:Test(constTest&)=delete;//Tomakeclasun-copyable.Test&operator=(constTest&)=delete;inta_;};intmain(){vectortest_vec;test_vec.emplace_ba

c++ - 如何在 std::map 中尝试放置 POD 结构?

我有一张int->{basictypes}的map,我需要存储。我想简单地创建一个struct{intf1,intf2;};并直接存储值,在存储过程中就地构造结构。我不希望有任何重复的键,所以try_emplace看起来很理想。我写了这段代码://mcve.cpp#include#includestructvarious{intf1,f2;};usingmap_t=std::map;voidexample(){map_tdict;//dict.try_emplace(1,2);dict.try_emplace(1,1,2);//dict.try_emplace(1,{1,2});}但是

c++ - 在 std::vector 中放置一个聚合

我尝试初始化std::vectorstd::vectorparticles;简单结构的实例structParticle{intid;doublex;doubley;doubletheta;doubleweight;};通过将emplace与初始化列表一起使用:num_particles=1000;for(inti=0;i但是我得到了错误C2660"std::vector>::emplace_back":Functiondoesn'tacceptoneargument我该如何解决? 最佳答案 std::vector::emplace也

复盘——vector 的 push_back() 和 emplace_back()——函数返回值

又被拷打了捏,问起来还是不会细节…vector的push_back()和emplace_back()我们来看一些代码:vec是vector1.传递对象实例2.传递临时对象3.直接传递数据成员(主要要按顺序)所以总结:当%_back()的是类对象实例或者临时对象的时候,两者没有区别;当直接传递数据成员的时候就不一样了:push_back():先调用第二种构造,构造出临时变量,接着调用移动构造/拷贝构造函数,在vector的内存上面构造。Emplace_back():直接调用第二种构造在vector的内存上面构造。那么具体是怎么构造的呢?为什么会这样?看源码:(说实话,还没没看懂是怎么构造的…)关

c++ - std::map::emplace() 缺失 - 过时的库?

我正在尝试使用map的C++11emplace()函数,但NetBeans说map没有这样的函数。查看header,它是“正确的”——没有提及(在Fedora16上)emplace()。这一切都很好,你知道……但我有点想使用emplace()。如何启用此功能?我知道它自去年三月以来就存在,可能更早。彻底的搜索表明emplace()基本上只存在于我的系统中的列表和vector的标题中。由于近十年来C++没有重大修订,所以我没有运气找到有关如果库“错误”该怎么办的文档。 最佳答案 如果您的实现不支持某些功能,您有两种选择:不要使用该功能