【发布时间】:2017-09-12 17:20:06
【问题描述】:
我想出了以下算法来删除向量中的连续重复项,但我正在寻找一种方法来改进它并能够将它与其他顺序容器一起使用。
我已经四处寻找一个常见的父容器类型,但到目前为止我什么都想不出来。
有什么想法吗?
谢谢!
template <class T>
void erase_adjacent_duplicate (std::vector<T>& v)
{
std::vector<T>::iterator it = v.begin();
while (it != v.end())
{
if(std::adjacent_find(it, v.end()) == v.end())
{
it = v.end();
}
else
{
it = std::adjacent_find(it, v.end()) - 1;
v.erase(it + 1);
}
}
}
【问题讨论】:
-
您的代码目前面临的问题究竟是什么?
-
嗯,通常你会通过传递两个迭代器来做到这一点。另外,您是否假设容器已经排序?
-
@user0042 我正在尝试找到一种方法来编辑它,以便我可以传递一个列表或一个向量或一个 forward_list ......等等......
-
@NirFriedman 它已经排序了
-
可以是
v.erase(std::unique(v.begin(), v.end()), v.end());。
标签: c++ algorithm templates containers sequential