How to Remove Duplicate Elements from Vector in C++ using std::u
- 时间:2020-10-11 15:17:18
- 分类:网络文摘
- 阅读:123 次
Removing duplicate elements and only keeping the unique items in an array (or vector, list) is easy. We can use std::unique method from STL.
The std::unique (from algorithms header) has the following signature:
1 2 3 4 5 | template<class ForwardIt> ForwardIt unique(ForwardIt first, ForwardIt last); template<class ForwardIt, class BinaryPredicate> ForwardIt unique(ForwardIt first, ForwardIt last, BinaryPredicate p); |
template<class ForwardIt> ForwardIt unique(ForwardIt first, ForwardIt last); template<class ForwardIt, class BinaryPredicate> ForwardIt unique(ForwardIt first, ForwardIt last, BinaryPredicate p);
Example C++ code to use std::unique to remove duplicate numbers from vector
It requires the vector to be sorted. Here is an example use:
1 2 3 4 5 6 7 | vector <int> arr = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5}; auto it = std::unqiue(begin(arr), end(arr)); // now arr becomes: {1, 2, 3, 4, 5, x, x, x, x, x, x} // x is indeterminate // then we can trim the array to make a unique arr.erase(it, end(arr)); // x is now {1, 2, 3, 4, 5} |
vector <int> arr = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5};
auto it = std::unqiue(begin(arr), end(arr));
// now arr becomes: {1, 2, 3, 4, 5, x, x, x, x, x, x}
// x is indeterminate
// then we can trim the array to make a unique
arr.erase(it, end(arr));
// x is now {1, 2, 3, 4, 5}The std::unique function will return the iterator that is beyond the last element of the unique array – which can be used later for removing the extra duplicate elements from the C++ list/vector.
C++ Generic Implementations of std::unique using template
Here are two possible implementation of the generic std::unique method:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | template<class F> F unique(F first, F last) { if (first == last) { return last; } F res = first; while (++first != last) { if (!(*res == *first) && ++ res != first) { *res = std::move(*first); } } return ++ res; } template<class F, class BinaryPredicate> F unique(F first, F last, BinaryPredicate p) { if (first == last) { return last; } F res = first; while (++first != last) { if (!p(*res, *first) && ++res != first) { *result = std::move(*first); } } return ++res; } |
template<class F>
F unique(F first, F last)
{
if (first == last) {
return last;
}
F res = first;
while (++first != last) {
if (!(*res == *first) && ++ res != first) {
*res = std::move(*first);
}
}
return ++ res;
}
template<class F, class BinaryPredicate>
F unique(F first, F last, BinaryPredicate p)
{
if (first == last) {
return last;
}
F res = first;
while (++first != last) {
if (!p(*res, *first) && ++res != first) {
*result = std::move(*first);
}
}
return ++res;
}–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:数学题:ABCD乘9等于DCBA,问ABCD各是数字几 数学题:乘积末尾有几个0 求解答:加工一批服装,每天加工300套,16天可以完成 数学题-这个工厂原有男工人多少名 开心“六一”之太阳岛之旅作文 橘子洲作文 关于奢侈 爱你在心口难开(24至25章) 吴志俨 珍惜生活的机会 美丽的青海作文
- 评论列表
-
- 添加评论