2

我了解到该emplace_back方法将对象推送到向量中而无需创建临时对象。但是,我找不到使用push或为priority_queue 实现此目的的方法emplace。有没有一种有效的方法来实现这一目标?或者使用 boost 的 shared_ptr 之类的容器在性能方面很好。

4

1 回答 1

2

Astd::priority_queue只是一个容器适配器,它std::vector使用堆操作包装底层容器(默认情况下)。所以为了把push东西放进去而不创建一个临时的,那么std::priority_queue::emplace正是你想要使用的。

当然,您不能将任何东西放入队列中的任意位置(并且您的推送元素不一定会出现在容器的末尾),因为它是优先级队列维护和内部顺序。但是,如果那是您想要做的,那么无论如何您选择了错误的容器(或容器适配器)。

不,如果它只是关于性能而不是生命周期管理,那么它很少是shared_ptr一个可行的选择。您是否需要动态内存分配,所以这不是一个选择,尤其是在 C++11 中。

于 2013-02-12T15:16:56.030 回答