STL 之 list


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编译并通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值