c++优先级队列推送/模板,而不创建临时对象
c++ priority_queue push/emplace without temporary object creation
我了解到emplace_back
方法在不创建临时对象的情况下将对象推入向量。然而,对于priority_queue,无论是使用push
还是emplace
,我都找不到实现这一点的方法。有没有有效的方法来实现这一点?或者使用boost的类似sharedptr的容器在性能方面是好的。
std::priority_queue
只是一个容器适配器,它用堆操作包装底层容器(默认为std::vector
)。因此,为了在不创建临时的情况下将某些内容push
放入其中,那么std::priority_queue::emplace
正是您想要使用的。
当然,您不能将任何东西放置在队列的任意位置(您的推送元素也不一定会出现在容器的末尾),因为它是一个维护内部顺序的优先级队列。但是,如果这是您想要做的,那么无论如何,您选择了错误的容器(或容器适配器)。
不,shared_ptr
很少是一个可行的替代方案,如果它只是关于性能而不是生命周期管理。要么你需要动态内存分配,要么不需要,所以这不是一个选项,尤其是在C++11中。
相关文章:
- 为什么当我们有常量引用时创建临时对象?
- 为什么在按值返回时创建临时对象,而不是在按值传递给函数参数时创建临时对象
- 我试图创建临时对象的方式有错误吗
- 将项添加到矢量而不创建临时对象
- 在此初始化中创建的临时对象数
- 在没有返回值优化的情况下将两个对象加在一起时,将创建多少个临时对象
- C++:如何创建一个临时对象,包含一个指针 - 常量或非常量,具体取决于上下文
- 按值函数创建范围的临时对象
- 从函数返回引用是否会导致在使用'auto'时创建新的临时对象?
- C++17:是编译器为(静态存储持续时间)const引用绑定创建的可修改的临时对象(和存储)
- 是否在对象中创建临时接口
- Visual Studio 在类型转换时不会创建临时对象
- 通过引用捕获异常时未创建临时对象
- 返回临时对象是否会在C++中创建临时对象
- 在引用初始化期间如何创建临时对象
- 创建c++临时对象
- 我可以直接调用operator()而不创建临时对象吗?
- 在复制构造函数中创建临时对象
- c++优先级队列推送/模板,而不创建临时对象
- 构造函数 c++ Object obj = Object( "string" , 22);正在创建临时对象?