【发布时间】:2021-07-03 23:25:33
【问题描述】:
考虑以下向量:
std::vector<int> arr = {20, 37, 11, 20, 15}
我需要删除重复的,即遇到超过n 次(在此示例中为n=1)
结果向量应如下所示:
{20, 37, 11, 15}
即后面的元素应该被删除,而不是前面的元素。
我有一个想法,在 std::remove_if 函数中使用 rbegin() 和 rend() 迭代器开始从末尾删除元素,但是我不确定如何在 remove_if 之后从向量中删除元素完毕。我相信“剩的垃圾”是一开始就积累起来的:
auto new_end = std::remove_if(arr.rbegin(), arr.rend(), [&n, &arr](const int a) {
return std::count(arr.begin(), arr.end(), a) > n;
});
//how to erase garbage?
【问题讨论】:
标签: c++ algorithm vector stdvector