c++ - 擦除删除习语如何与范围/约束算法一起使用?
问题描述
我正在尝试对擦除删除习语使用 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
所有容器都存在重载,这使得该特定用例的动机降低。
解决方案
std::ranges::unique
(and std::ranges::remove
) 返回从第一个删除元素到容器末尾的子范围,因此您需要std::begin
在传递给之前使用std::vector::erase
:
v.erase(std::ranges::begin(std::ranges::remove(v, 42)), std::end(v));
v.erase(std::ranges::begin(std::ranges::unique(v)), std::end(v));
推荐阅读
- sympy - 如果集成,SymPy 函数 integration_steps 是否会显示结果?
- php - 用于加密和解密的 PHP 代码在每次执行时创建不同的密文。任何人都可以用 PL/SQL 中的等效代码帮助我吗
- dart - 在 Flutter App 上按下按钮后,如何移动到屏幕下方的特定 Widget?
- kdb - 以字符串为参数的函数
- r - 当每个计算值都依赖于前一个值时如何使用 apply
- xml - 祖先和后代的长形式 - Xpath 轴
- c - 验证整数 inout 和一般情况
- react-native - 针对 Android 和 iOS 平台的 React Native 应用程序的自动化测试
- windows - 如何使用批处理在 Windows 上自动启动所有服务?
- java - 将 xml 映射到 Json