调用empty()而不是检查size()是否为0



对任一容器C,代码if (c.size()== 0)本质上与if (c.empty())是等价的。既然如此,为什么要偏向于某一种形式呢,尤其是考虑到empty()通常被实现为内联函数,并且它所做的仅仅是返回size()是否为0。

理由很简单:empty()对所有的标准容器都是常数时间操作,而对一些list实现,size()耗费线性时间。

原因:在所有的标准容器中,只有list具有把元素从一处链接到另一处而不需要拷贝任何数据的能力。把一个区间从一个list链接到另一个list可以通过常数时间来完成,即提供了高效的链接操作。如果size()是常数时间操作,那么list的每个成员函数都必须更新它们所操作的链表的大小,当然也包括splice(源代码见list源代码),可是splice更新它所改变的链表的大小的唯一方式是计算所链接的元素的个数,而这会使splice不具有我们所希望的常数时间的操作性能。如果不要求splice更新它所改变的链表的大小,则splice可以成为常数时间操作,可是这时size()会成为线性时间操作。通常,它需要遍历自己的整个数据结构来看一看自己含有多少个元素。所以,list和splice必须有一个做出让步。但是不管发生什么,调用empty()而不是检查size()==0是否成立总是没错的。

调用empty()而不是检查size()是否为0

时间: 2024-10-10 22:43:08

调用empty()而不是检查size()是否为0的相关文章

php调用empty报错

php调用empty时,出现“Can't use function return value in write context”错误. 源代码如下: if(empty(session("username"))) $this->redirect("Manager/login"): 错误原因:empty函数不能使用返回值作为参数. 修改如下即可: $ischeck = session("username"); if(empty($ischeck

php调用empty出现错误Can't use function return value in write context

php调用empty出现错误Can't use function return value in write context 2012-10-28 09:33:22 | 11391次阅读 | 评论:0 条 | itokit  今天的一个简单程序: C/C++ Code复制内容到剪贴板 protected function _isLogin() { if(empty(cookie(C('itokit_com')))) { $this->error('未登录后台,请先登录', 'Public/log

多态 这是动态语言和静态语言(例如Java)最大的差别之一。动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。

多态 类具有继承关系,并且子类类型可以向上转型看做父类类型,如果我们从 Person 派生出 Student和Teacher ,并都写了一个 whoAmI() 方法: class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def whoAmI(self): return 'I am a Person, my name is %s' % self.name clas

Android什么时候只会调用onPause()而不会调用onStop()?

看到网上很多人说弹出Dialog时只会调用onPause()而不会调用onStop(),可是自己做了下实验,此时既不会调用onPause()也不会调用onStop()... 大概扫了下官方文档,translucent(半透明) activity好像可以做到,试了下,果真可以. 版权声明:本文为博主原创文章,未经博主允许不得转载.

IAR 9+ 编译 TI CC2541 出现 Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition.

IAR 9+ 编译 TI CC2541 出现 Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition. Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition. 从讨论得知是IAR的配置问题 https://blog.csdn.net/zhangjs0322/article/details/34108663 用IAR 80

WO+开放平台:API调用开发手记(话费计费接口2.0)

WO+能力共享平台(http://open.wo.com.cn)是中国联通推出的开放平台.拥有的丰富电信能力资源以及深度整合挖掘的第三方能力资源等.WO+平台提供的API均为简洁优雅的RESTful风格,极大的方便了开发人员的使用. 上段为废话.如今言归正传.我会用一个简单的演示样例来说明WO+平台的API是怎样地简单,怎样地好用. 本文代码请參见:https://github.com/sharetop/WoPlus_Java_SDK A:确认流程 以调用量最大的『计费能力2.0』为例.先来看看

C++ 容器一些细节

参考:http://www.cnblogs.com/answeryi/archive/2011/12/16/2289811.html: 目录 ==================================================== 第一章 容器 第二章 Vector和string 第三章 关联容器 第四章 迭代器 第五章 算法 第六章 函数 第七章 在程序中使用STL ==================================================== 第1章

c++容器使用总结(转载)

目录 ==================================================== 第一章 容器 第二章 Vector和string 第三章 关联容器 第四章 迭代器 第五章 算法 第六章 函数 第七章 在程序中使用STL ==================================================== 第1章 容器 第1条:慎重选择容器类型. 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.

C++ 容器及选用总结(转载供自学)

C++ 容器及选用总结 目录 ==================================================== 第一章 容器 第二章 Vector和string 第三章 关联容器 第四章 迭代器 第五章 算法 第六章 函数 第七章 在程序中使用STL ==================================================== 第1章 容器 第1条:慎重选择容器类型. 标准STL序列容器:vector.string.deque和list. 标准