c++ push_back与emplace_back添加pair{}的问题

参考:https://stackoverflow.com/questions/53900865/emplace-back-vs-push-back-when-inserting-a-pair-into-stdvector

问题描述:

queue<pair<int,int>> q;
//correct
q.push({0,1});
q.emplace(0, 1);
//wrong
q.emplace({0, 1});

我以为emplace可以完全替换push的。

原因

push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。
emplace_back不能使用{1, 2},因为它可以接受任何东西(因此没有提供足够的“上下文”),并且该语法没有足够的含义。push_back可以接受它,因为它需要特定类型.

你可能感兴趣的:(零散的知识点,c++,开发语言,后端)