STL 之 list

来源:互联网 发布:沈阳电明数据恢复 编辑:程序博客网 时间:2024/05/17 08:25


list常用函数表

1,push_back

在末尾添加元素

2,pop_back

移除末尾元素

3,push_front

在开头添加元素

4,pop_front

移除开头元素

5,begin

 

6,end

 

7,insert

1,li.insert(postion, val)

2,li.insert(positino, n, val)

3,li.insert(position, first, last)

用法类似vector

8,erase

1,li.erase(postion):移除position位置的节点

2,li.erase(first, last):移除first-last位置的节点

返回迭代器指向的下一个

9,resize

li.resize(n, val=0):把列表大小置为n,多余补足val

10,unique

1,li.unique():连续相同的数只留一个

2,li.unique(cmp):按比较函数进行删除与保留

11,splice

1,li.splice(position,l2):把列表l2放到liposition前,并清空l2

2,li.splice(position,l2, iter):把l2的iter节点放到li的position前,并删掉l2的iter节点

3,li.splice(position,l2,first,last):把l2的first-last节点放到li的position前,并删掉l2

的first-last的节点

12,reverse

反转列表

13,sort

li.sort(cmp=less<T>()):默认按照非递减排序

14,merge

1,li.merge(l2):l2置于li之前,并清空l2

2,li.merge(l2, cmp):cmp比较函数,依次进行比较操作

例:

li:10,9,19,8;

l2:11,4,9

cmp:greater<int>()

result:11,10,9,19,9,8

15,swap

交换两个列表

16,rbegin

 

17,rend

 

18,remove

remove(val)

19,remove_if

li.remove_if(cmp):把满足函数cmp的节点删掉

20,back

 

21,empty

 

22,clear

 

23,assign

 


有些库函数不能对list进行操作,比如random_shuffle
下面用一段代码来说明上述函数的用法:

#include <iostream>#include <list>#include <algorithm>#include <cstdlib>#include <iterator>using namespace std; void O(list<int>li, char *s){    cout << s << endl;    copy(li.begin(), li.end(), ostream_iterator<int>(cout, " "));    if (li.empty()) cout << "E";    cout << endl << endl;}bool cmp(int a, int b){    return a > b;}bool cmp0(int a){    return a > 10;}int main(){    list<int>li, l2;    list<int>::iterator iter;    list<int>::reverse_iterator rev_iter;    int i, j, k;    for (i = 0; i < 10; i++)        li.push_back(i);    for (i = 0; i < 10; i++)        l2.push_back(rand()%1000);    O(li, "----push_back----");    li.pop_back();    O(li, "----pop_back----");    li.push_front(10);    O(li, "----push_front----");    li.pop_front();    O(li, "----pop_front----");     iter = find(li.begin(), li.end(), 3);    if (iter != li.end())    {        li.insert(iter, 100);   //不改变原来迭代器        O(li, "----insert----");        cout << "erase = " << *li.erase(iter) << endl;        O(li, "----erase----");     }    else        li.push_back(999);    O(li, "----after insert----");    iter = find(li.begin(), li.end(), 4);    li.erase(++iter,li.end());    O(li, "----erase----");     li.insert(li.begin(), 2, -1);    O(li, "----insert----");    O(l2, "----l2 parameter----");    li.insert(li.begin(), l2.begin(), l2.end());    O(li, "----insert-----");     li.remove(-1);    O(li, "----remove----");    li.remove_if(cmp0);    O(li, "-----li-----");    li.resize(30, -2);    O(li, "-----resize----");    li.unique();    O(li, "----unique----");    li.unique(cmp);    O(li, "----unique - li----");    li.resize(10);     O(l2, "----v2----");    iter = find(li.begin(), li.end(), 0);    li.splice(iter, l2);    O(li, "----splice----");    cout << *iter << endl;     O(l2, "-----v2----");    l2.splice(l2.begin(), li, iter);    O(l2, "----splice l2----");    O(li, "----splice li----");    li.splice(li.begin(), l2, l2.begin(), l2.end());    O(l2, "----splice - l2----");    O(li, "----splice - li----");     li.reverse();    O(li, "----reverse - li----");     li.sort(greater<int>());    O(li, "----sort - li----");     li.resize(5);    li.resize(8, -2);    O(li, "----resize - li----");    for (i = 0; i < 6; i++) l2.push_back(rand()%100);    O(l2, "----l2 -----");     l2.push_back(800);    li.push_back(900);    l2.push_front(550);    O(li, "----before li----");    O(l2, "----before l2----");    li.merge(l2, greater<int>());    O(li, "----after li----");    O(l2, "----after l2----");     li.swap(l2);    O(li, "-----li-----");    O(l2, "-----l2-----");     cout << "the back() = " << l2.back() << endl;    l2.clear();    l2.assign(10, 1);    O(l2, "----l2----");     return 0;}

以上代码经过CB GNU GCC编译并通过

0 0
原创粉丝点击