我正在使用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
但是当我对向量进行排序并尝试唯一时,它工作正常。
这是某种不确定的行为吗?
std :: unique()函数坏了吗……
不,它没有损坏。
...还是什么?
是,是。
这是某种不确定的行为吗?
编号
根据文档,std::unique
删除所有adjacent非唯一元素。如果重复项不相邻,则它们将保留。如果范围已排序,则所有重复项将相邻,因此将其全部删除。
std::unique
在any范围内起作用,并删除连续重复项(或者连续的equivalent元素)。除非对范围进行了排序,否则可能不是all重复项。
这实际上是一项功能,因为您可以将功能用于除删除[[all重复项之外的其他目的-可能并不总是您想要的(并且,当您需要时,只需先std::sort
)。] >