list为STL中的双向链表
list的成员函数
size() O(1)
begin() O(1)
end() O(1)
push_front(x) O(1)
push_back(x) O(1)
pop_front() O(1)
pop_back() O(1)
insert(p,x) O(1)
erase(p) O(1)
clear() O(n)
list相对于vector来说,它的insert和erase是O(1)的时间复杂度。
1.erase()删除一个元素或一个区域的元素
list1.erase(list1.begin());
list1.erase(++list1.begin(),list1.end());
2. remove()删除链表中匹配值的元素(匹配元素全部删除)
list1.remove(4)
删除列表中所有的4
3.remove_if()删除条件满足的元素(遍历一次链表),参数为自定义的回调函数
// 小于2的值删除
bool myFun(const int& value) { return (value < 2); }
list1.remove_if(myFun);
4.resize()重新定义链表长度(两重载函数)
list1.resize(5) // list1 (1,2,3,0,0)用默认值填补
list1.resize(5,4) // list1 (1,2,3,4,4)用指定值填补
5.reverse()反转链表:
list1.reverse();
6.sort()对链表排序,默认升序(可自定义回调函数)
list对象L1(4,3,5,1,4)
L1.sort(); // L1(1,3,4,4,5)
L1.sort(greater<int>()); // L1(5,4,4,3,1)
7.merge()合并两个有序链表并使之有序
list1.merge(list2); // list1(1,2,3,4,5,6) list2现为空
L1(3,2,1), L2(6,5,4)
L1.merge(L2, greater<int>()); // list1(6,5,4,3,2,1) list2现为空
25.splice()对两个链表进行结合(三个重载函数) 结合后第二个链表清空
list1.splice(++list1.begin(),list2);
// list1(1,4,5,6,2,3) list2为空
list1.splice(++list1.begin(),list2,list2.begin());
// list1(1,4,2,3); list2(5,6)
list1.splice(++list1.begin(),list2,++list2.begin(),list2.end());
//list1(1,5,6,2,3); list2(4)
26.insert()在指定位置插入一个或多个元素(三个重载函数)
list1.insert(++list1.begin(),9); // list1(1,9,2,3)
list1.insert(list1.begin(),2,9); // list1(9,9,1,2,3);
list1.insert(list1.begin(),list2.begin(),--list2.end());//list1(4,5,1,2,3);
27.swap()交换两个链表(两个重载)
list1.swap(list2); // list1(4,5,6) list2(1,2,3)
28. unique()删除相邻重复元素
L1(1,1,4,3,5,1)
L1.unique(); // L1(1,4,3,5,1)