10

除了使用 emplace 进行单次插入和使用向量中的 insert 进行多次插入外,它们的实现还有其他区别吗?

在这两种情况下,插入任何元素都会移动所有其他元素。

4

2 回答 2

16

std::vector::insert 通过调用复制构造函数或移动构造函数将元素复制移动到容器中。

Instd::vector::emplace元素是就地构造的,即不执行复制或移动操作。

后者是从 C++11 开始引入的,如果复制你的类是一个不平凡的操作,那么它的使用是可取的。

于 2013-03-27T12:56:32.207 回答
2

主要区别在于,它insert采用类型与容器类型相同的对象并将该参数复制到容器中。emplace接受一个或多或少的任意参数列表,并根据这些参数在容器中构造一个对象。

于 2013-03-27T12:54:42.483 回答