C++ C++;,指针排序向量的唯一性的自己实现

C++ C++;,指针排序向量的唯一性的自己实现,c++,algorithm,vector,unique,C++,Algorithm,Vector,Unique,如何为指针的排序向量编写自己的std::unique实现,以便: a) 避免内存泄漏(稳定) b) 对于大型数据集,请尽快使用fast 比较具有索引[i]、[i-1]的两个相邻项,然后调用项[i]的析构函数并从向量中删除的最简单的变体看起来非常慢 我能问一下这个问题可能的解决办法吗?示例代码将非常有用:-)。谢谢 我试图用以下功能编写自己的实现。这里有两个指数。第一个表示向量中最后一个唯一的元素,第二个索引是公共索引 我正在逐元素处理数组元素,并交换元素,以便非唯一元素保留在向量的末尾。在我看来

如何为指针的排序向量编写自己的std::unique实现,以便:

a) 避免内存泄漏(稳定)

b) 对于大型数据集,请尽快使用fast

比较具有索引[i]、[i-1]的两个相邻项,然后调用项[i]的析构函数并从向量中删除的最简单的变体看起来非常慢

我能问一下这个问题可能的解决办法吗?示例代码将非常有用:-)。谢谢

我试图用以下功能编写自己的实现。这里有两个指数。第一个表示向量中最后一个唯一的元素,第二个索引是公共索引

我正在逐元素处理数组元素,并交换元素,以便非唯一元素保留在向量的末尾。在我看来,这种一次性删除k元素的方法比重复删除一个元素要快

然后删除位于第一个索引右侧的所有元素


这不是一个家庭作业,而是一个严肃的问题。我需要从点云(1E9PoT)…

< P>中删除重复元素,而不是滚动自己独特算法的实现,为什么不考虑使用其中的一个?这些容器设计用于存储指向对象的指针,而不是对象本身,并自动封装处理所有资源回收所需的逻辑。使用其中一个容器,您可以轻松地使用标准的唯一算法

如果你真的想推出自己版本的独特算法,我认为你有两个指针的想法是对的,一个用于阅读,一个用于写作。算法的高级示意图是这样工作的:在索引0处启动读和写指针。然后,重复应用此步骤:

  • 查看读指针指向的值,并创建一个新的临时指针指向它
  • 将读取指针向前移动
  • 当读取指针下的元素与记住的值相同时,将读取指针向前移动
  • (此时,读取指针下的元素是不等于当前值的第一个值。)
  • 将写指针下的元素与临时指针指向唯一元素的值交换
  • 向前移动写指针
  • 此算法终止时,写入指针指向所有唯一值之后的第一个值。它不会丢失任何指针,因为元素只是重新排序,而不是销毁。因此,完成后,可以从写指针迭代到数组末尾,释放找到的每个指针。这在O(n)时间内运行,这是渐近最优的


    希望这有帮助

    1:Stackoverflow不是为了招揽为您所做的工作。作业2.在a)中,什么是“稳定的”,您在哪里谈论内存泄漏?2.你试过什么?没有人会在这里为您编写代码。还有很多其他人……你自己有没有尝试过解决这个问题?你怎么能比O(N)更快地解决这个问题?沃利克的评论是完全恰当的。这个网站是关于你无法使用的代码的建议,不是完整的答案。谢谢你的帮助,但是。。我将代码添加到一个不使用C++ Boost…@ JNAMS的现有项目中,我刚刚更新了这个答案,包含了您将要使用的算法的草图。你能不能改天再看一下,看看这是不是你想要的?谢谢你的回答和帮助。。。