为什么 std::erase 和 std::erase_if 不支持投影?

时间:2021-07-19 15:56:32

标签: c++ c++20 std-ranges erase-remove-idiom

C++ 范围很好,但 AFAIK 他们仍然“受苦”,因为他们不知道修改容器,例如如果你使用 ranges::remove 你仍然需要做 container.erase(...

现在有一些算法知道如何从容器(std::erasestd::erase_if)中擦除,但与范围不同的是,它们不支持投影。

我的问题是,这是否仅仅是因为 (AFAIK) 该功能是与范围分开提出的(+ 缺乏时间/缺乏建议),还是该功能不可用的根本原因。

1 个答案:

答案 0 :(得分:3)

to_sumstd::erase 不是适用于任何容器的算法。它们是一组对许多容器执行“相同操作”的重载函数。

关联容器没有 std::erase_if,因为它要么与其成员std::erase不一致,要么与序列容器{{1}不一致}}。

我不认为在 eraseerase 中存在投影参数存在根本的不兼容,但它们是根据现有的 {{1} }、erase_if 和成员 erasestd::remove,缺少投影。