【问题标题】:why does vector.erase remove all my duplicates?为什么vector.erase会删除我所有的重复项?
【发布时间】:2012-08-13 17:01:11
【问题描述】:

我正在尝试删除向量中数字的重复项。我用它来做到这一点:

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

用谷歌找到它,它工作得很好,我的问题是为什么? 根据我在 cplusplus 上阅读的内容,erase 从第一个参数删除到最后一个参数。 例如:

vec1.erase(vec1.begin(),vec1.begin()+3);  //removes first 3 elements

unique 返回指向第一个副本的指针,所以在更简单的版本中,我正在写的是:

vec1.erase(first duplicate, vec1.end());

我的向量不应该在第一次复制后结束吗?

【问题讨论】:

  • cplusplus 不是很好的参考。尝试阅读cppreference

标签: c++ vector unique erase


【解决方案1】:

std::unique 就地消除唯一元素并返回指向范围结果结尾的指针。例如,

1 2 2 3 3 3
^begin      ^end

变成

1 2 3 . . . (garbage)
      ^ resulting end

您正在考虑std::adjacent_find,它确实将迭代器返回到第一个重复元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多