泛型算法(5)——特定容器算法

Posted on 2019-01-04 16:35  Summer_8918  阅读(140)  评论(0)    收藏  举报

与其他容器不同,链表类型list和forward_list定义了几个成员函数形式的算法。定义了独有的sort、merge、remove、reverse和unique算法。通用版本的sort要求随机访问迭代器,因此不能用于list和forward_list,因为这两个类型分别提供双向迭代器和前向迭代器。

lst.merge(lst2)

lst.merge(lst2, comp)

将 lst2 的元素合并到 lst 中。这两个 list 容器对象都必须排序。lst2中的元素将被删除。合并后,lst2为空。返回 void 类型。第一个版本使用<操作符,而第二个版本则使用comp指定的比较运算

lst.remove(val)

lst.remove_if(unaryPred)

调用lst.erase 删除所有等于指定值或使指定的谓词函数返回非零值的元素。返回 void 类型

lst.reverse()

反向排列 lst 中的元素

lst.sort

对 lst 中的元素排序

lst.splice(iter,  lst2)

lst.splice(iter, lst2, iter2)

lst.splice(iter, beg, end)

将 lst2 的元素移到 lst 中迭代器 iter 指向的元素前面。在 lst2 中删除移出的元素。第一个版本将 lst2 的所有元素移到 lst 中;合并后,lst2 为空。lst 和 lst2 不能是同一个 list 对象。第二个版本只移动 iter2 所指向的元素,这个元素必须是 lst2 中的元素。在这种情况中,lst 和lst2 可以是同一个 list 对象。也就是说,可在一个 list对象中使用 splice 运算移动一个元素。第三个版本移动迭代器 beg 和 end 标记的范围内的元素。beg 和 end 照例必须指定一个有效的范围。这两个迭代器可标记任意 list 对象内的范围,包括 lst。当它们指定 lst 的一段范围时,如果 iter 也指向这个范围的一个元素,则该运算未定义。

lst.unique()

 lst.unique(binaryPred)

调用 erase 删除同一个值的团结副本。第一个版本使用 ==操作符判断元素是否相等;第二个版本则使用指定的谓词函数实现判断