我正在尝试对擦除删除习语使用 c++20 约束算法:
std::vector<int> v;
v.erase(std::unique(std::begin(v), std::end(v)), std::end(v));
但是当我做一个简单的转换时:
v.erase(std::ranges::unique(v), std::end(v));
我收到一个参数不匹配的错误:erase
error: no matching function for call to 'std::vector<int>::erase(std::ranges::borrowed_subrange_t<std::vector<int>&>, std::vector<int>::iterator)'
如果第二个参数是 ,则会产生类似的错误std::ranges::end(v)
。
我怎样才能让它工作?
该问题最初用于remove
代替unique
,但std::erase
所有容器都存在重载,这使得该特定用例的动机降低。