В наблюдаемом поведении нет различий.
Но могут быть различия в деталях реализации.
Например, если vector
реализован со счетчиком, то size()
может просто вернуть счетчик.
empty()
может проверить:
vector.counter == 0
И если вы позвоните size() == 0
, это будет то же самое, что и реализация empty()
.Без разницы
Но в случае vector
, реализованного двумя указателями begin_ptr
и end_ptr
, тогда нужно вычислить size()
end_ptr - begin_ptr
.
Так что проверка size() == 0
вычислит размер, а затем сравнит с 0.
Принимая во внимание, что empty()
может просто проверить:
begin_ptr == end_ptr
empty()
будет реализован так, как, по мнению разработчика, будет работатьлучше всего в общем случае.
Поэтому я бы порекомендовал позвонить empty()
, когда это необходимо.
Если вы сначала проверите, если size() > 1000
, а затем убедитесь, что это не empty()
.Тогда по логике это бесполезная проверка.
https://en.cppreference.com/w/cpp/container/vector/empty