std :: unique()函数坏了吗? [重复]

问题描述 投票:0回答:2

我正在使用std :: unique()函数删除int和一些如何总是会有一个额外的元素

vec.erase(unique(vec.begin(),vec.end()),vec.end());

我抬头看cplusplus.com,该示例也显示了相同的行为它有一个重复的值

a debug session showing the duplicate elements in the vector

sample code from cppreference run on cpp.sh

但是当我对向量进行排序并尝试唯一时,它工作正常。

这是某种不确定的行为吗?

c++ algorithm stl c++17
2个回答
2
投票

std :: unique()函数坏了吗……

不,它没有损坏。

...还是什么?

是,是。

这是某种不确定的行为吗?

编号

根据文档,std::unique删除所有adjacent非唯一元素。如果重复项不相邻,则它们将保留。如果范围已排序,则所有重复项将相邻,因此将其全部删除。


2
投票

std::uniqueany范围内起作用,并删除连续重复项(或者连续的equivalent元素)。除非对范围进行了排序,否则可能不是all重复项。

这实际上是一项功能,因为您可以将功能用于除删除[[all重复项之外的其他目的-可能并不总是您想要的(并且,当您需要时,只需先std::sort)。] >

© www.soinside.com 2019 - 2024. All rights reserved.