【发布时间】:2021-07-19 15:56:32
【问题描述】:
C++ 范围很好,但 AFAIK 他们仍然“受苦”,因为他们不知道修改容器,例如如果你使用ranges::remove,你仍然需要做container.erase(...
现在有些算法确实知道如何从容器中擦除(std::erase、std::erase_if),但与范围不同,它们不支持投影。
我的问题是,这仅仅是因为(AFAIK)该功能是与范围分开提出的(+ 缺乏时间/缺乏建议),还是有根本原因导致该功能不可用。
【问题讨论】:
-
远程需要它是否有“根本”原因?使用function adapter。
-
范围后面不一定有容器。
-
@Barry 只是语法糖,对我来说写 &MyStruct::member_ 更好,但这是个人风格的事情......
-
@NoSenseEtAl
erase_if(v, proj(&MyStruct::member_, pred))? -
@Barry 是的,但这不是 std:: 我知道这是一个愚蠢的理由,但是当某些东西在 std 中时,通常将东西卖给其他人要容易得多……但你是对,如果可以使用 Boost,那么 HOF 是不错的选择。
标签: c++ c++20 std-ranges erase-remove-idiom