翻阅以前的代码,时常会看到如下代码:
1 2 3 4 |
|
这些例子中只是把 size()
的返回值简单地进行布尔逻辑比较,意思是判断容器空与非空。代码没有逻辑问题,只是不够友好。
在C++的标准库容器中都有一个 empty()
方法,返回布尔值,表明容器当前是否为空。我一直觉得这么名字容易让人会错意,因为 empty 一词既有空的(形容词,改成 is_empty()
是否妥当一些?)之意,又有清空(动词)之意。不过,就算有歧义,但只要使用的时候统一就好了,标准库做到了这一点。
使用 size()
判断容器非空与否的不好之处在于:某些标准库中的实现中对某些容器的 size()
求值操作不是线性的。
比如 std::list<>
,在某些实现中,每一次调用 size()
都会遍历整个 list 来求 size,这会带来一定的性能问题。如果是线性容器则不会有此问题。
总之,如果只是想判断空与非空,则应总是使用 empty()
,而不是 size()
。