C++\templace_back参数

Fan*_*Fan 7 c++ performance c++11

这是我日常工作中的一段代码.我只想问你两种情况之间是否存在差异,特别是在性能方面.

std::vector< std::pair<std::string, std::string> > aVec;

// case 1
aVec.emplace_back("hello", "bonjour");

// case 2
aVec.emplace_back(std::pair("hello", "bonjour"));
Run Code Online (Sandbox Code Playgroud)

以下问题:

这两个案例的std :: list怎么样?

son*_*yao 8

emplace_back就地构造元素,传入的参数将完美地转发给元素的构造函数.

对于第一种情况,概念上只需要一个步骤,std::pair即将调用适当的构造函数来直接构造元素vector.

对于第二种情况,需要三个步骤; (1)将相应的构造函数调用构造一个临时的std::pair,(2)将元素vector从临时构造到就地构造std::pair,(3)临时std::pair销毁.

  • 另外,第二种情况与“push_back”的操作相同。 (2认同)