翻阅以前的代码,时常会看到如下代码:
if(str.size() == 0) {} if(!vec.size()) {} if(!list.size()) {} // ......
这些例子中只是把 size()
的返回值简单地进行布尔逻辑比较,意思是判断容器空与非空。
代码没有逻辑问题,只是可能效率不够高。
在C++的标准库容器中都有一个 empty()
方法,返回布尔值,表明容器当前是否为空。
使用 size()
判断容器非空与否的不好之处在于:某些标准库中的实现中对某些容器的 size()
求值操作不是线性的。
比如 std::list<>
,在某些实现中,每一次调用 size()
都会遍历整个 list 来求 size,这会带来一定的性能问题。如果是线性容器则不会有此问题。
总之,如果只是想判断空与非空,则应总是使用 empty()
,而不是 size()
。