Есть ли разница между vector.size () = 0 и vector.empty ()? - PullRequest
0 голосов
/ 14 февраля 2019

Я пишу код на c ++ и хочу знать, когда мы вызываем вектор, есть ли разница между vector.size() = 0 или vecor.empty();, который я запутался.

if (Vector.size()>1000)
    if (!Vector.empty())
        std::cout << "I am Here " ;

Интереснознать, чтобы достичь третьей строки, применяя вторую строку имеет смысл?мы можем сказать, что если первая строка истинна, то у нас есть вектор, который не пуст?

1 Ответ

0 голосов
/ 14 февраля 2019

В наблюдаемом поведении нет различий.

Но могут быть различия в деталях реализации.

Например, если 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...