use*_*490 1 c++ algorithm c++17 c++20
我正在尝试重写一段目前看起来像这样的代码:
if (nchildren > 7 &&
parent->isChildValid(0) &&
parent->isChildValid(1) &&
parent->isChildValid(2) &&
parent->isChildValid(3) &&
...
parent->isChildValid(7)
) {
}
Run Code Online (Sandbox Code Playgroud)
它测试parent->isChildValid(i)8 次,其中i, 是在此特定情况下 [0:7] 范围内的索引。我正在寻找(作为练习)一种使用类似于std::all_of但我了解这些函数仅适用于支持迭代器的构造的方法来提高效率(想象一下稍后的范围变化)。所以像这样:
std::all_of(0, 7, [&](int i){ return parent->isChildValid(i); });
Run Code Online (Sandbox Code Playgroud)
当然不行。但我想知道是否有类似/替代选项(我确信有))而不(当然)声明i是一个向量并使用{0, 1, 2, 3, 4, 5, 6, 7}. 我也试图避免这种情况,而是寻找类似的东西,all_of但我可以在其中设置我想要测试函数的最小和最大索引(范围循环类型)。
编辑:我无法使用升压。
在 C++20 中,您可以使用views::iota和ranges::all_of来执行此操作
if (nchildren > 8 &&
std::ranges::all_of(std::views::iota(0, 8),
[parent](auto i) { return parent->isChildValid(i); })
) {
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
429 次 |
| 最近记录: |