ベクターの size() と empty() の比較 - なぜ empty() が推奨されるのでしょうか? 質問する

ベクターの size() と empty() の比較 - なぜ empty() が推奨されるのでしょうか? 質問する

何かをデバッグしているときに、STL vector::empty() の実装を見つけました。

bool empty() const
        {return (size() == 0); }

私は、ベクターが空であるかどうかを調べるときは常に、size() ではなく empty を使用することが推奨されると考えています。しかし、その実装を見ると、そうすることのメリットは何だろうと疑問に思います。代わりに、empty を呼び出すと、内部的に size()==0 が呼び出されるため、関数呼び出しのオーバーヘッドが発生します。

リストの場合、size() は定数時間を保証しないので、empty() が役に立つかもしれないと考えました。私の仮説を検証するために、リストの実装を確認したところ、驚いたことに、リストにも同じ実装が見つかりました。

return (size() == 0);

ちょっと混乱しています。empty が内部的に size() を使用する場合、なぜ size() よりも empty を優先する必要があるのでしょうか?

ベストアンサー1

std::vector から std::list または他のコンテナーに切り替えると、異なる可能性があるからです。

たとえば、std::list::sizetakeO(n)と notの実装の一部O(1)

おすすめ記事