何かをデバッグしているときに、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::size
takeO(n)
と notの実装の一部O(1)
。