容器为空用  size()==0  还是用empty() 函数,两者有什么区别吗?

解决方案 »

  1.   

    从字面上就应该使用empty()
    否则要函数名干吗?
      

  2.   

    应该都可以,你可以自己看看源代码呀
    下面是vector的:size_type size() const
    { // return length of sequence
    return (_Mysize);
    }bool empty() const
    { // test if sequence is empty
    return (size() == 0);
    }
      

  3.   

    我知道是用empty,我是想知道为什么不能用 size==0
    能举出一个例子empty()为真, 但size不为0的情况吗,谢谢。
      

  4.   

    如果不考虑编译器优化的话,empty效率比0 == size差(多了一次函数调用)!至于为什么要有empty,只是让这个类看起来更完整,比如我举个例子:
    true 和 false
    两者只要存在一个即可,因为true == !false
    任何语言都有true和false!还有一种情况,就是简化编程时的输入,比如判断一个类为空,要判断3个变量(甚至更多,可能还要计算什么的):
    if (!a && !b && !c)
    if (empty())比较上面两个句子,效果一样,但后者更简洁,可读性强。
      

  5.   

    你post 一封Email给贝尔实验室问问他们有什么方法能满足你
      

  6.   

    其实含义是一样的,只不过empty()用起对代码的可读性要好些,
      

  7.   

    我在一本书上看到 vector可以为空,但是这个VECTOR容量可以非0
    希望  stivenjia  不懂就不要胡说。
      

  8.   

    拿strings来说,size()和length()两个成员函数所做的事情相同,size()是获取容器元素个数的通用成员函数,length()对应于一般的C-string strlen()函数,传回字符串长度。成员函数empty()用来检验字符数是否为0,亦即字符串是否为空。应该优先使用empty()函数,因为它比size()或length()来得快。
      

  9.   

    Do u mean this?

    vector<int> vtWhat;
    vtWhat[1];
    vtWhat[2];
    vtWhat[3];
    cout<<vtWhat.size()<<endl;
    return 0;
      

  10.   

    我希望 weiyongzhao 能好好理解一下我的文字含义而不是到这里乱说话,OK ?
    如果您没有理解清楚请Post me a email 我可以逐字给您解释。
    如果您有何方法能阐述这个问题请贴出您的代码而不是在这里撒野。
      

  11.   

    刚看到问题,忍不住说几句在大部分情况下,两者的效率是一样的,empty内部调用size,empty是内联函数,效率相同
    对于某些容器来说,对于某些实作版本,empty会比size要快,取决于实现。