消去削除イディオムに 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)'
2 番目の引数が の場合、同様のエラーが生成されますstd::ranges::end(v)
。
どうすればこれを機能させることができますか?
remove
の代わりに最初に使用された質問ですが、すべてのコンテナにunique
オーバーロードされた があり、std::erase
その特定のユースケースのモチベーションが低下します。