You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于std::unique处理vector后结果不符合预期的技术咨询

问题解析:std::unique为何没按你预期改变vector大小?

嘿,我来帮你理清这个困惑——你遇到的问题核心是对std::unique的工作逻辑理解有误!

关键知识点:std::unique只处理相邻的重复元素

std::unique的作用并不是移除容器中所有重复的元素,它只会遍历容器,把连续相邻的重复元素“移到”容器的后半段(准确来说是把不重复的元素依次往前覆盖,重复的元素留在后面),最后返回指向第一个被“移到后面”的重复元素的迭代器。

回到你的代码:

  • 对于nums = {1,2,3,1},两个1并不相邻,整个序列里没有连续重复的元素,所以std::unique遍历完之后,根本找不到需要处理的重复项,返回的迭代器就是nums.end()。这时候std::distance(nums.begin(), ip)的结果就是原数组的大小4,调用resize(4)自然不会改变数组的大小,所以输出4 4。
  • 对于nums2 = {1,2,3,4},本身就没有任何重复元素,std::unique同样返回nums2.end(),所以resize后大小保持4,这和你的预期一致是完全正常的。

这就是为什么你的代码会出现和预期不符的输出啦——std::unique从始至终都没找到需要处理的相邻重复元素,自然不会改变容器的有效元素范围。

内容的提问来源于stack exchange,提问作者CodeTalker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:49:40