44 容器的成员函数优先于同名的算法

  1. 成员函数往往速度快。
  2. 成员函数通常与容器(特别是关联容器)结合的更加紧密。

关联容器,假设一个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则总是在修改它的所操作的链表。

猜你喜欢

转载自blog.csdn.net/weixin_28712713/article/details/80922875
44