#c
#c
Вопрос:
Я изучаю std::max_element
. Я написал следующий код:
auto e = std::max_element(
std::begin(rtspUrls), std::end(rtspUrls),
[](const RTSPUrl amp;p1, const RTSPUrl amp;p2) {
unsigned int area1 = p1.resolution().width() * p1.resolution().height();
unsigned int area2 = p2.resolution().width() * p2.resolution().height();
return area1 < area2;
});
но одна вещь, которую я не мог понять, — это то, как я уверен, что у меня есть элемент в e
. Может быть, что набор rtspUrls
пуст. Мой e
имеет тип std::_Rb_tree_const_iterator<RTSPUrl>
, для которого я не знаю, как проверить, указывает ли он на что-то.
Комментарии:
1.
if(rtspUrls.empty())
?
Ответ №1:
Из cplusplus.com:
Возвращаемое значение
Итератор для наибольшего значения в диапазоне или последнего, если диапазон пуст.
Итак, чтобы проверить, действительно ли он что-то вернул, вы сравниваете его с std::end(rtspUrls)
. Если он равен, то это не так. Если он не равен этому, то он вернул что-то, и вы можете получить к нему доступ через разыменование, т. Е. *e
.
if (e == std::end(rtspUrls)) {
// No return
} else {
// Use *e to get the value
}
Ответ №2:
Если rtspUrls
пусто, max_element
возвращает второй переданный вами параметр (итератор для последнего элемента), т.е. std::end(rtspUrls)