C++ List 常见用法全解(代码版)

C++ list 常见用法:

list 双向链表 顺序容器

与向量vector相比,插入和删除是常数时间但是不能随机访问



void bianli(list<int>& vt)  //list是不能直接访问数组索引的。底层实现是链表。
{
    //遍历1   c++11的新特性
    
    for (auto it : vt)
        cout<<it<<" ";
    cout<<endl;
    
    //遍历2   正向迭代器访问
    for (auto it = vt.begin(); it != vt.end(); it++)
        cout<<*it<<" ";
    cout<<endl;
}

bool compare(int a, int b)  //对于自定义类型,就需要自己写比较函数。用来sort等功能
{
    return a > b;
}

void list_test()
{
    //创建
    list<int> vt1;
    list<int> vt2(3, 1);          //初始push进去3个1
    list<int> vt3(vt2);           //用vt2构造vt3
    list<int> vt4(vt2.begin(), vt2.end());    //vt2的迭代器圈定的部分初始化vt4
    
    //插入
    vt1.push_back(2);           //list可以前后插入,其实vector也可以
    vt1.push_front(5);
    vt2.insert(vt2.begin(), 3); //在某个位置插入value。 注意vt.begin()是在第一个值的前面插入。
    vt2.insert(vt2.end(), 7, 2);   //vt.end()是在最后一个值后面插入7个2.
    vt1.insert(vt1.begin(), vt2.begin(), vt2.end());    //在vt1开头插入vt2。
    
    //获取
    vt2.front();                    //第一个元素
    vt2.back();                     //最后一个元素
    list<int>::iterator it1 = vt1.begin();     //获取迭代器首地址
    list<int>::iterator it2 = vt1.end();       //获取迭代器最后一个元素后面那个迭代器
    
    list<int>::reverse_iterator it3 = vt1.rbegin();           //反向迭代器,现在是指向最后一个元素了。具体用法如下。
    for (auto it4 = vt1.rbegin(); it4 != vt1.rend(); it4 ++)    //反向遍历数组
        cout<<*it4<<" ";
    cout<<endl;
    
    //删除
    vt2.pop_back();                             //删除最后一个
    vt2.pop_front();                            //删除第一个
    vt2.erase(vt2.begin());                     //删除这个迭代器所指的元素(后面那个元素)
    vt2.erase(vt2.begin(), vt2.begin());        //删除这两个迭代器之间的元素。是[)。
    vt1.clear();                                //直接清空
    
    //其他
    vt2.empty();                                        //是否为空
    vt2.size();                                         //数组长度
    *max_element(vt2.begin(), vt2.end(), compare);      //返回最大值。对于自定义类型也还可以使用,最后加一个compare函数。
    *min_element(vt2.begin(), vt2.end(), compare);      //返回最小值。min_element函数返回的是一个迭代器。'*'这个符号取值。
    
    vt2.sort(compare);                  //list的排序是这样写的!自定义函数作为参数。
    vt2.unique();                       //list的unique直接消除 相邻重复 的多余元素。如果要去重要结合排序使用。
    vt2.remove(2);                      //移除所有值为2的元素
    
    find(vt2.begin(), vt2.end(), 2);                    //查找是否有2。找到了返回迭代器;未找到返回vt2.end()。
    *upper_bound(vt2.begin(), vt2.end(), 2);            //upper_bound返回一个非递减序列[first, last)中的第一个 大于 值val的迭代器。
    *lower_bound(vt2.begin(), vt2.end(), 2);            //lower_bound返回一个非递减序列[first, last)中的第一个 大于等于 值val的 迭代器。
    reverse(vt2.begin(), vt2.end());                    //反转数组
    vt2.resize(2);                                      //截取前2个元素
    
    vt1.sort(compare);
    vt2.sort(compare);
    vt2.merge(vt1, compare);                            //vt1 merge进 vt2。 vt1变为空。要求是必须先有序,然后按照同一种方式merge。
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值