这个问题在这里已经有了答案:push_backvsemplace_back(7个回答)关闭8年前。试图了解使用push()之间的区别或emplace()对于std::stack.我在想如果我创建一个std::stack,然后我会使用push()因为整数是原始类型,emplace()没有任何内容构建。但是,如果我正在创建std::stack那么我会选择emplace()因为std::string是一个对象。这是正确的用法吗? 最佳答案 要完全理解emplace_back的作用,首先必须了解可变参数模板和右值引用。这是现代C++中一个相
std::unordered_map::emplace和std::unordered_map::insert在C++中有什么区别? 最佳答案 unordered_map::insert将键值对复制或移动到容器中。Itisoverloadedtoacceptreference-to-constoranrvaluereference:std::pairinsert(conststd::pair&value);templatestd::pairinsert(P&&value);unordered_map::emplace允许您通过就地构造
据我了解,std::vector::emplace_back()的目的是专门避免调用复制构造函数,而是直接构造对象。考虑以下代码:#include#include#includeusingnamespacestd;structstuff{unique_ptrdummy_ptr;boost::filesystem::pathdummy_path;stuff(unique_ptr&&dummy_ptr_,boost::filesystem::pathconst&dummy_path_):dummy_ptr(std::move(dummy_ptr_)),dummy_path(dummy_pa
g++4.7.2是否实现std::set::emplace,由C++11标准定义并记录here?我写了以下小测试用例:#include#includestructFoo{std::stringmBar;booloperatorFoos;intmain(){Foosfoos;foos.emplace(std::string("Hello"));}在G++4.7.2下,编译失败:[john.dibling@somewherehacks]$g++-omain.o-std=c++0x-cmain.cppmain.cpp:Infunction‘intmain()’:main.cpp:19:10:
这个问题在这里已经有了答案:push_backvsemplace_back(7个回答)关闭9年前。社区审核了是否重新打开这个问题2个月前并关闭:原始关闭原因未解决我想知道两者之间有什么区别。我注意到emplace是c++11添加的。那为什么要加呢? 最佳答案 Emplace接受就地构造对象所需的参数,而insert接受(引用)一个对象。structFoo{Foo(intn,doublex);};std::vectorv;v.emplace(someIterator,42,3.1416);v.insert(someIterator,F
考虑以下程序:#include#includeusingnamespacestd;structT{inta;doubleb;stringc;};vectorV;intmain(){V.emplace_back(42,3.14,"foo");}它不起作用:$g++-std=gnu++11./test.cppInfileincludedfrom/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h:34:0,from/usr/include/c++/4.7/bits/allocator.h:48,from/usr/include/
我第一次使用map,我意识到有很多方法可以插入元素。您可以使用emplace(),operator[]或insert(),加上变体,如使用value_type或make_pair.虽然有很多关于所有这些的信息和关于特定案例的问题,但我仍然无法理解大局。所以,我的两个问题是:他们每个人相对于其他人的优势是什么?是否需要在标准中添加emplace?没有它,以前有什么是不可能的吗? 最佳答案 在map的特殊情况下,旧的选项只有两个:operator[]和insert(insert的不同口味)。所以我将开始解释这些。operator[]是一
我正在尝试做emplace_back变成std::vector>,但找不到正确的语法。#include#includeintmain(){std::vector>v;std::mapa{{1,2}};v.push_back({{1,2}});v.emplace_back({1,2});//errorv.emplace_back({{1,2}});//errorv.emplace_back(({1,2}));//error}push_back在这里工作,但不是emplace_back.我怎样才能得到emplace_back工作吗? 最佳答案
我正在尝试做emplace_back变成std::vector>,但找不到正确的语法。#include#includeintmain(){std::vector>v;std::mapa{{1,2}};v.push_back({{1,2}});v.emplace_back({1,2});//errorv.emplace_back({{1,2}});//errorv.emplace_back(({1,2}));//error}push_back在这里工作,但不是emplace_back.我怎样才能得到emplace_back工作吗? 最佳答案
我编写了一个简单的程序来尝试在标准库容器中就地创建对象。这是我写的:#include#includeclassAB{public:explicitAB(intn);AB(constAB&other)=delete;AB(AB&&other);AB&operator=(constAB&other)=delete;AB&operator=(AB&&other)=default;private:inti;};AB::AB(intn):i(n){std::coutv;v.emplace_back(1);v.emplace_back(2);v.emplace_back(3);};我用g++(4.