NoS*_*tAl 9 c++ c++20 std-ranges c++23
我知道 iota 可能很复杂(例如无限),因此在一般情况下这不容易完成,但在某些情况下应该可以在 O(1) 中进行查找/包含操作。
例如
int main() {
auto vals = views::iota(10'000'000'000, 100'000'000'000);
return ranges::find(vals, 74'656'000'000) != vals.end();
}
Run Code Online (Sandbox Code Playgroud)
“无限”运行(进行线性搜索)
显然检查可以在 O(1) 内完成。
有没有办法用 C++ 来实现这种通用方式(即在其他视图上查找/包含需要线性时间,并且当它检测到 iota 时需要 O(1)),或者我需要手动检测传递给我的函数的视图是什么时候有限iota视图并进行>=front <=back检查?
iota_view总是有序的,因此您可以使用它ranges::binary_search来避免无限线性搜索
int main() {
auto vals = views::iota(10'000'000'000, 100'000'000'000);
return ranges::binary_search(vals, 74'656'000'000);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
515 次 |
| 最近记录: |