<C++> list容器本质|常用接口|自定义排序规则(下)

简介: <C++> list容器本质|常用接口|自定义排序规则
void testr()
{
  list<int>L6;
  L6.push_back(10);
  L6.push_back(30);
  L6.push_back(40);
  //判断容器是否为空
  if (L6.empty())
  {
    cout << "list 为空" << endl;
  }
  else {
    cout << "lsit 不为空,元素个数为:" << L6.size() << endl;
  }
  //重新指定大小
  L6.resize(6, 100);
  printInfo(L6);
  L6.resize(3);
  printInfo(L6);
}

2.4、 list 插入和删除

用于对 list容器进行数据的插入和删除

函数原型:


push_back(elem);

在容器尾部加入一个元素

pop_back();

删除容器中最后一个元素

push_front(elem);

在容器开头插入一个元素

pop_front();

从容器开头移除第一个元素

insert(pos,elem);

在pos位置插elem元素的拷贝,返回新数据的位置。

insert(pos,n,elem);

在pos位置插入n个elem数据,无返回值。

insert(pos,beg,end);

在pos位置插入[beg,end)区间的数据,无返回值。

clear();

移除容器的所有数据

erase(beg,end);

删除[beg,end)区间的数据,返回下一个数据的位置。

erase(pos);

删除pos位置的数据,返回下一个数据的位置。

remove(elem);

删除容器中所有与elem值匹配的元素

示例:

void testt()
{
  list<int>L7;
  //尾插
  L7.push_back(1);
  L7.push_back(2);
  L7.push_back(3);
  //头插
  L7.push_front(30);
  L7.push_front(20);
  L7.push_front(10);
  printInfo(L7);
  //插入 insert
  list<int>::iterator t = L7.begin();
  L7.insert(++t, 6);
  //删除 erase
  t = L7.end();//end迭代器指向最后一个有效元素的下一个位置
  L7.erase(--t);
  printInfo(L7);
  //移除
  L7.push_back(10000);
  L7.push_back(10000);
  printInfo(L7);
  L7.remove(10000);
  printInfo(L7);
  //清空
  L7.clear();
  if (L7.empty())
  {
    cout << "list 已经清空" << endl;
  }
}

2.5、list 数据存取

用于对 list容器中数据进行存取

函数原型:


front();

返回第一个元素。

back();

返回最后一个元素。

示例:


void testy()
{
  list<int>L1;
  L1.push_back(10);
  L1.push_back(20);
  L1.push_back(30);
  L1.push_back(50);
  //访问首尾元素
  cout << "第一个元素值为:" << L1.front() << endl;
  cout << "最后一个元素值为:" << L1.back() << endl;
  //不支持下标访问,也不支持随机访问,底层是链表
  list<int>::iterator it = L1.begin();
  it++;//正确
  //it + 1;//错误,不存在与"+"匹配的运算符
}

2.6、list 反转和排序

将容器中的元素反转,以及将容器中的数据进行排序

函数原型:


reverse();

反转链表

sort();

链表排序

反转示例:

void testu()
{
  list<int>L1;
  L1.push_back(10);
  L1.push_back(20);
  L1.push_back(30);
  cout << "反转前:" << endl;
  printInfo(L1);
  cout << "反转后:" << endl;
  L1.reverse();
  printInfo(L1);
}

排序示例:


//用于降序排序
bool myCompare(int v1, int v2)
{
  //降序:让第一个数 > 第二个数
  return v1 > v2;
}
void testi()
{
  list<int>L;
  L.push_back(2);
  L.push_back(1);
  L.push_back(6);
  L.push_back(4);
  L.push_back(5);
  L.push_back(3);
  cout << "排序前:" << endl;
  printInfo(L);
  cout << "升序排序后:" << endl;
  L.sort();
  printInfo(L);
  cout << "降序排序后:" << endl;
  L.sort(myCompare);
  printInfo(L);
}

所有不支持随机访问迭代器的容器,不可以使用标准算法

这些容器内部会提供排序的成员方法

sort是 list容器内部的排序方法,默认为升序排列,可以通过自己编写函数来决定排序的规则。


3、排序案例

3.1、生肖类

class Person
{
public:
  Person(string name, int age, int height)
  {
    this->name = name;
    this->age = age;
    this->height = height;
  }
  //属性
  string name;
  int age;
  int height;
};

3.2、排序规则

//自定义排序规则 compare
bool compare(Person& p1, Person& p2)
{
  //按照身高降序
  if (p1.height == p2.height)
  {
    //如果身高相同,按照年龄升序排序
    return p1.age < p2.age;
  }
  else {
    return p1.height > p2.height;
  }
}

3.3、具体实现与效果

//自定义排序规则 compare
bool compare(Person& p1, Person& p2)
{
  //按照身高降序
  if (p1.height == p2.height)
  {
    //如果身高相同,按照年龄升序排序
    return p1.age < p2.age;
  }
  else {
    return p1.height > p2.height;
  }
}


b4da3633e5ba41e5bf92bf768f303ae4.png


list容器在泛型编程里还是比较重要的,希望我的分享可以给大家带来帮助,最后要个赞不过分吧


目录
相关文章
|
1月前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
46 2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
17天前
|
弹性计算 Kubernetes 网络协议
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
|
1月前
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
51 5
|
1月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
47 2
|
3月前
|
存储 容器
容器镜像解析问题之desc.Image() 方法确定返回的 Image 接口类型如何解决
容器镜像解析问题之desc.Image() 方法确定返回的 Image 接口类型如何解决
19 0
|
2天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
14天前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第12天】
41 5
|
8天前
|
存储 缓存 Docker
docker中挂载数据卷到容器
【10月更文挑战第16天】
17 2
|
10天前
|
存储 关系型数据库 MySQL
|
11天前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第13天】
17 2