C++ 为什么vector.erase会删除我所有的副本?
我试图删除向量中的重复数字。我用这个来做到这一点:C++ 为什么vector.erase会删除我所有的副本?,c++,vector,unique,erase,C++,Vector,Unique,Erase,我试图删除向量中的重复数字。我用这个来做到这一点: vec1.erase( unique(vec1.begin(),vec1.end()) ,vec1.end()); 用谷歌找到的,效果很好,我的问题是为什么? 根据我在cplusplus上读到的内容,擦除从第一个参数删除到最后一个参数。 例: 并且unique返回指向第一个副本的指针,因此在更简单的版本中,我要写的是: vec1.erase(first duplicate, vec1.end()); 我的向量不应该在第一次复制后结束
vec1.erase( unique(vec1.begin(),vec1.end()) ,vec1.end());
用谷歌找到的,效果很好,我的问题是为什么?
根据我在cplusplus上读到的内容,擦除从第一个参数删除到最后一个参数。
例:
并且unique返回指向第一个副本的指针,因此在更简单的版本中,我要写的是:
vec1.erase(first duplicate, vec1.end());
我的向量不应该在第一次复制后结束吗?
std::unique
消除了位置上的唯一元素,并返回一个指向范围结果端的指针。比如说,
1 2 2 3 3 3
^begin ^end
变成
1 2 3 . . . (garbage)
^ resulting end
您考虑的是
std::innect\u find
,它确实会向第一个重复元素返回迭代器。cplusplus被认为不是一个好的参考。试着阅读。
1 2 3 . . . (garbage)
^ resulting end