难度: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( *i == 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;
}
[指导意见]:使用标准库的算法,代替自己手动造轮子。更快更容易,而且更安全。