C++ Primer第十章④
C++ Primer
泛型算法
泛型算法结构
都是对之前一些细节的总结,我就不扯了,也没什么实质内容。
特定容器算法-链表list和forward_list
与其他容器不同,链表定义了独有的一些函数:sort, merge, remove, reverse和unique。因为通用版本的sort要求随机访问迭代器,因此不能用于链表,链表要用双向迭代器或前向迭代器:
函数 | 含义,返回均为void |
---|---|
lst.merge(lst2)(重载版本lst.merge(lst, comp)) | 将lst2的元素并入lst中,二者原先必须是有序的,第一个使用<第二个自定义comp |
lst.remove(val(重载版:lst.remove_if(pred)) | 删除与val相等或使一元谓词pred为真的所有元素 |
lst.reverse() | 翻转lst的元素顺序 |
lst.sort()(重载版lst.sort(comp)) | 使用<或自定义比较操作排序元素 |
lst.unique()(重载版lst.unique(pred)) | 删除同一个值的连续拷贝。第一个版本使用==,第二个使用给定的二元谓词 |
splice函数
链表类型独有,主要用来移动一个链表的元素到另一个链表的指定位置:
函数 | 含义 |
---|---|
lst.splice(p, lst2) | p是一个指向lst中元素的迭代器,函数将lst2的所有元素移动到p之前的位置,并且将元素从lst2中删除,lst2类型必须与lst一样,且不能是同一个链表 |
lst.splice(p, lst2, p2) | p2是一个指向lst2中元素的迭代器,函数将p2指向的元素移动到lst中,lst2与lst可以是同一个链表 |
lst.splice(p, lst2, b, e) | b和e必须表示lst2中的合法范围,将这个范围的元素移动到lst中,lst和lst2可以是同一个链表,但p不能指向b和e之间的元素 |
还有一个与splice类似的函数splice_after,差别在于移动的位置,用的时候再查询好了,说那么多我自己也记不住。
链表的这些特有操作会改变容器