- 成员函数往往速度快。
- 成员函数通常与容器(特别是关联容器)结合的更加紧密。
关联容器,假设一个set容,其中包含一百万个值,现在查找727这个值是否包含在容器中
set<int> s; //创建set,并放入一百万个值
...
set<int>::iterator it = s.find(727); //使用find成员函数
if(it != s.end())
...
set<int>::iterator it = find(s.begin(),s.end(),727); //使用find算法
if(it != s.end())
...
set容器的find成员函数是对数时间的运行,无论容器中是否有72,查找次数不会超过40次,而通常只要求20次比较操作,find算法是线性时间运行的,最坏的情况下执行100W次,平均情况下50W次。
STL算法以相等性来判断两个对象是否具有相同的值,而关联容器则使用等价性来进行它们的测试。
你在调用 remove 、remove_if或者unique算法过后,必须紧接着再调用erase,而list的 remove 、remove_if或者unique成员函数则是实实在在的删除元素,所以无需再调用erase。
在sort算法和list的sort函数之间有一个重要的区别是,前者根本不能被应用到list容器上,这是因为,list的迭代器是双向迭代器,而sort算法要求的是随机迭代器。merge算法和list的merge函数之间存在行为上的隔阂,merge算法是不允许修改其源区间的,而list::merge则总是在修改它的所操作的链表。