我有一个在boost :: ptr_vector中存储元素的算法。对于算法而言,一旦分配指向元素的指针在ptr_vector被销毁之前不会改变,这一点很重要。另一方面,我需要对ptr_vector进行排序。我假设(可能天真地),因为常规的std :: sort交换元素,它将简单地交换ptr_vector内部的指针顺序而不使用new和delete。另一方面,我在this post指示中看到排序ptr_vector实际上可能会改变元素指针。有人可以确认重新分配实际发生了吗?有没有办法避免它?
答案 0 :(得分:1)
我现在认为我的恐惧可能不是合理的。似乎the post that prompted my concerns引用了标准库排序,它实际上会导致元素的交换和重新分配。但是ptr_vector有一个sort的成员函数实现,我完全有理由期望它保留元素指针并避免重新分配。
答案 1 :(得分:0)
指针向量作为一个容器显然正在被排序。
如果你想保留所有迭代器和元素引用有效,你应该使用
可悲的是(?)我认为目前没有任何东西可以将这两个概念结合起来。当然可以编写这样的东西,然后Boost Intrusive
可以非常有助于管理实现。