C++ list基本使用总结

目录:
- 初始化
- 插入数据
- 遍历数据
- 删除数据
- 排序数据
- 合并数据
- 交换数据
- 获取首/尾数据

  • 初始化
// list 初始化
void InitList()
{
    list<int> lst; //初始化一个空的

    list<int> lst1(10); // 初始化一个包括10个元素的,且10个元素值都是0

    list<int> lst2(10, 55); // 初始化一个包括10个原始,且10个元素值都是55

    list<int> lst3(lst1); // 使用一个list来初始化,创建了一个副本

    list<int> lst4(++lst2.begin(),--lst2.end()); // 使用一个list的部分元素来初始化
}
  • 插入数据
// list 插入数据
template <class T>
list<T> InsertList(list<T> lst, T t)
{
    lst.push_back(t);  // 插入到列表末端

    t = 10;
    lst.push_front(t); // 插入到列表的最前端

    lst.assign(10, t); // 放入10个相同的元素(会清除掉之前存入的所有数据)

    T arr[10] = {1,2,3,4,5,6,7,8,9,0};
    lst.assign(arr, arr + 10); // 将数组数据放入list(会清除掉之前存入的数据)

    list<T> lst1(10, 15);
    lst.insert(lst.begin(), lst1.begin(), lst1.end()); // 在指定位置,插入另一个list的部分元素
    lst.insert(lst.end(), 5, 20); // 在指定位置,插入5个元素,值均为20
    lst.insert(--lst.end(), 25); // 在指定位置,直接插入值为25的元素

    return lst;
}
  • 遍历数据
// list 遍历数据
void IteratorList(list<int> lst)
{
    if (lst.empty()) // 判断列表是否为空
        return;

    list<int>::iterator iter = lst.begin(); // 前向迭代器
    for (; iter != lst.end(); iter++)
    {
        cout << "iter value: " << *iter << endl;
    }

    list<int>::reverse_iterator revIter = lst.rbegin(); // 方向迭代器
    for (; revIter != lst.rend(); revIter++)
    {
        cout << "revIter value: " << *revIter << endl;
    }

    list<int>::const_iterator constIter = lst.cbegin();
    for (; constIter != lst.cend(); constIter++)
    {
        cout << "constIter value: " << *constIter << endl;
    }
}
  • 删除数据
// list 删除数据
void DeleteList(list<int>& lst)
{
    if (lst.empty())
        return;

    lst.pop_back(); // 删除末尾的元素

    lst.pop_front(); // 删除第一个元素

    lst.erase(lst.begin(), ++lst.begin()); // 删除指定范围的元素(使用迭代器来确定需要被删除的元素),区间[ )

    lst.erase(--lst.end()); // 删除指定迭代器指向的元素

    lst.remove(20); // 删除指定值的元素,若多个元素值相同,则多个元素均会被删除(通过数值的方式来确定被删除元素,且删除所有与 val 值相等的元素)

    lst.unique(); // 删除list中重复的数据,即去重,会保留一个元素

    lst.clear(); // 清除掉所有数据
}
  • 排序数据
int arr[10] = {3,2,1,4,6,5,9,7,8,0};
lst.assign(arr, arr + 10); // 将数组数据放入list(会清除掉之前存入的数据)

lst.sort(); // 按从小到大排序
list<int>::iterator iter = lst.begin();
for (; iter != lst.end(); iter++)
{
    cout << "iter value: " << *iter << endl; // 分别输出:0 1 2 3 4 5 6 7 8 9 
}

lst.reverse(); // 按从大到小排序,即倒序
iter = lst.begin(); 
for (; iter != lst.end(); iter++)
{
    cout << "iter value: " << *iter << endl; // 分别输出:9 8 7 6 5 4 3 2 1 0
}
  • 合并数据
list<int> lst1(10, 33); // 10个元素,值均为33
list<int> lst2(10, 44); // 10个元素,值均为44
list<int> lst3(10, 55); // 10个元素,值均为55

// 合并方式一
lst1.merge(lst2); // 合并元素后,lst2被清空,在lst1的末端添加lst2的元素。即将lst2中元素移到lst1中

// 合并方式二
lst1.splice(lst1.begin(), lst3, lst3.begin(), --lst3.end()); // 在指定位置,将lst3中的指定范围元素移到lst1中,lst3中对应元素被清除,区间范围:[ }
lst1.splice(lst1.end(), lst3, lst3.begin()); // 在指定位置,将lst3中指定元素移到lst1中,同时从lst3中清除该元素
lst1.splice(lst1.end(), lst3); // 在指定位置,将lst3中所有元素移至lst1中,并清空lst3
  • 交换数据
list<int> lst1(10, 33); // 10个元素,值均为33
list<int> lst2(10, 44); // 10个元素,值均为44

lst1.swap(lst2); // 二个list相互交互所有元素
  • 获取首/尾数据
list<int> lst;
int arr[10] = {3,2,1,4,6,5,9,7,8,0};
lst.assign(arr, arr + 10); 
// 获取最后一个和第一个元素的值
cout << "back value:" << lst.back() << "front value:" << lst.front() << endl; // 输出 back value:0  front value:3
cout << ++lst.back() << "\t" << ++lst.front() << endl;  // 输出 1    4,同时list中对应元素也变成了1和4
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值