c++容器使用之排序、去重

使用场景

消除重复单词,假设有以下单词

overjumpsredslowthefoxquickturtlethered

思路

  1. 将单词放入vector
  2. 对vector进行排序,使得重复的单词相邻出现
  3. 使用标准库的unique算法重排vector,使得不重复的元素出现在vector开始部分
  4. 由于算法不能执行容器操作,使用erase成员完成真正的删除操作

代码

void elimDups(vector<string> &words) {
    // 按字典序排序
    sort(words.begin(), words.end());
    // unique重排输入范围
    // 排列在范围的前部,返回指向不重复区域之后一个位置的迭代器
    auto end_unique = unique(words.begin(), words.end());
    // 删除重复单词
    words.erase(end_unique, words.end());
}

使用unique

调用unique后,vector将变为:

foxjumpsoverquick

red

slowtheturtle???

???

返回的end_unique迭代器指向第一个???

words的大小并未改变,它仍有10个元素。unique返回的迭代器指向最后一个不重复元素之后的位置。此位置之后的元素仍然存在,但我们不知道它们的值是什么。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值