这是我日常工作中的一段代码。我只想问你两种情况之间是否存在差异,特别是在性能方面。
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"));
以下问题:
这两个案例的std :: list怎么样?
答案 0 :(得分:8)
emplace_back将就地构造元素,传入的参数将完美地转发给元素的构造函数。
对于第一种情况,概念上只需要一步,即调用std::pair
的适当构造函数直接在vector
中构造元素。
对于第二种情况,需要三个步骤; (1)将调用适当的constructor来构造临时std::pair
,(2)该元素将在vector
中从临时std::pair
就地构建, (3)临时std::pair
被销毁。