荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Dreamer (我与萤火虫), 信区: SoftDev
标  题: 【C++】[FAQ]我们已经有了 "美好的老qsort()",为什?
发信站: 荔园晨风BBS站 (Thu Jun 10 13:52:58 2004), 站内信件


Q: 我们已经有了 "美好的老qsort()",为什么还要用sort()?
A: 对于初学者而言,
qsort(array,asize,sizeof(elem),elem_compare);


看上去有点古怪。还是
sort(vec.begin(),vec.end());


比较好理解,是吧。那么,这点理由就足够让你舍qsort而追求sort了。对于老手
来说,sort()要比qsort()快的事实也会让你心动不已。而且sort是泛型的,可以
用于任何合理的容器组合、元素类型和比较算法。例如:
struct Record {
string name;
// ...
};

struct name_compare { // compare Records using "name" as the key
bool operator()(const Record& a, const Record& b) const
{ return a.name<b.name; }
};

void f(vector<Record>& vs)
{
sort(vs.begin(), vs.end(), name_compare());
// ...
}

另外,还有许多人欣赏sort()的类型安全性——要使用它可不需要任何强制的类型
转换。对于标准类型,也不必写compare()函数,省事不少。如果想看更详尽的解
释,参看我的《Learning Standard C++ as a New Language》一文。

另外,为何sort()要比qsort()快?因为它更好地利用了C++的内联语法语义。




--
如果你真的爱萤火虫,你就不应该将她困在瓶子里;
如果你真的爱萤火虫,你应该放开她,让她在天空中自由自在地飞!
虽然你会不舍得她,但是最终你就会明白这样你才真正拥有了她!

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.223]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店