簡體   English   中英

在std :: max_element上施加條件

[英]Impose a condition on std::max_element

如果沒有元素大於某個特定值,有什么方法可以使std::max_element返回end迭代器?

想象一下我有這個向量:

std::vector<int> vector{3, 6, 2, 5};
auto it = std::max_element(vector.begin(), vector.end());

如果沒有元素大於7,如何將it指向vector.end()

我沒有看到直接執行此操作的算法,但是在事實發生后再進行處理非常簡單:

auto temp = std::max_element(v.begin(), v.end());
auto it = (temp ==v.end() || *temp > 7) ? temp : v.end();

使用range-v3 ,您可以執行以下操作:

std::vector<int> v{3, 6, 2, 5};
auto r = v | ranges::view::filter([](auto e){ return e > 7; });
auto it = ranges::max_element(r);
if (it == r.end()) {
    std::cout << "End\n";
} else {
    std::cout << *it << std::endl;   
}

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM