我正在嘗試重新撰寫一段目前看起來像這樣的代碼:
if (nchildren > 7 &&
parent->isChildValid(0) &&
parent->isChildValid(1) &&
parent->isChildValid(2) &&
parent->isChildValid(3) &&
...
parent->isChildValid(7)
) {
}
它測驗了parent->isChildValid(i)8 次,其中i, 在這種特殊情況下是 [0:7] 范圍內的索引。我一直在尋找(作為練習)使用類似于std::all_of但我理解這些函式僅適用于支持迭代器的構造的方法來提高效率(想象稍后更改范圍)。所以是這樣的:
std::all_of(0, 7, [&](int i){ return parent->isChildValid(i); });
當然行不通。但我想知道是否有類似/替代選項(我確定有))沒有(當然)宣告i是一個向量并使用{0, 1, 2, 3, 4, 5, 6, 7}. 我也試圖避免這種情況,而是尋找類似的東西,all_of但我可以在其中設定我希望測驗函式的最小和最大索引(范圍回圈型別)。
編輯:我不能使用提升。
uj5u.com熱心網友回復:
在 C 20 中,您可以使用views::iotaandranges::all_of來執行此操作
if (nchildren > 8 &&
std::ranges::all_of(std::views::iota(0, 8),
[parent](auto i) { return parent->isChildValid(i); })
) {
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/532368.html
標籤:C 算法C 17c 20
上一篇:這個演算法的復雜度是多少?
