Gotw#3 使用标准库,或者重访问临时对象

难度:3/10
多用标准库,别总重复造轮子。#2的题,如果用标准库,可以避免多少问题?
问题:
如果用标准库的算法,不用自己写循环,#2的题的陷阱可以少多少?(同#2的要求一样,不能改变函数的原义)
#2中的那段漏洞百出的代码:
string FindAddr( list<Employee> l, string name )
  {
    
for( list<Employee>::iterator i = l.begin();
         i 
!= l.end();
         i
++ )
    {
      
if*== name )
      {
        
return (*i).addr;
      }
    }
    
return "";
  }
上次修改后的版本:
  string FindAddr( const list<Employee>& l,
                   
const string& name )
  {
    
string addr;
    
for( list<Employee>::const_iterator i = l.begin();
         i 
!= l.end();
         
++i )
    {
      
if( (*i).name == name )
      {
        addr 
= (*i).addr;
        
break;
      }
    }
    
return addr;
  }

答案:
其他的不动,只用find解决两个临时对象和end()的调用
string FindAddr( list<Employee> l, string name )
  
{
    list
<Employee>::iterator i =
      find( l.begin(), l.end(), name );

    
if( i != l.end() )
    
{
      
return (*i).addr;
    }

    
return "";
  }
再和这个版本比较下:
  string FindAddr( const list<Employee>& l,
                   const string& name )
  {
    string addr;
    list<Employee>::const_iterator i =
      find( l.begin(), l.end(), name );

    if( i != l.end() )
    {
      addr = (*i).addr;
    }
    return addr;
  }
[指导意见]:使用标准库的算法,代替自己手动造轮子。更快更容易,而且更安全。

posted on 2012-02-21 22:00 高兴 阅读(133) 评论(0)  编辑 收藏 引用 所属分类: GotW


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

统计

常用链接

留言簿

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜