【嵌入式——C++】list(STL)

【嵌入式------C++】 list(STL)

基本概念

list是一个链表,将数据进行链式存储,链表是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链表实现的,链表的组成是有一系列结点组成。
结点组成 :一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

对任意位置进行快速插入和删除元素,容器遍历速度没有数组快,占用空间比数组大。

STL中的链表是一个双向循环链表。由于链表的存储方式不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器。

需要引入头文件#include <list>

构造函数

默认构造

cpp 复制代码
list<int> l;

区间方式构造

cpp 复制代码
list<int> l2(l.begin(),l.end());

拷贝构造

cpp 复制代码
list<int> l3(l);

n个elem构造

cpp 复制代码
list<int> l4(5,1000);

代码示例

cpp 复制代码
void testList01() {
 //创建list容器 默认构造
 list<int> l;
 //添加数据
 l.push_back(10);
 l.push_back(20);
 l.push_back(30);
 l.push_back(40);

 printList(l);// 10 20 30 40

 //区间方式构造
 list<int> l2(l.begin(),l.end());
 printList(l2);// 10 20 30 40

 //拷贝构造
 list<int> l3(l);
 printList(l3);// 10 20 30 40

 //n个elem
 list<int> l4(5,1000);
 printList(l4);//1000 1000 1000 1000 1000
}

赋值和交换

  1. assign();
  2. swap(lst);
  3. operator=;

代码示例

cpp 复制代码
void testList02() {
 list<int> l;
 l.push_back(10);
 l.push_back(20);
 l.push_back(30);
 l.push_back(40);
 printList(l);// 10 20 30 40

 list<int> l2;
 l2 = l;
 printList(l2);// 10 20 30 40

 list<int> l3;
 l3.assign(l.begin(),l.end());
 printList(l3);// 10 20 30 40

 list<int> l4;
 l4.assign(5,100);
 printList(l4); //100 100 100 100 100

 list<int> l5;
 l5.push_back(2);
 l5.push_back(3);
 l5.push_back(4);
 l5.push_back(5);
 printList(l5); // 2 3 4 5
 //交换
 l.swap(l5);
 printList(l5); // 10 20 30 40
}

大小操作

  1. size();
  2. resize();
  3. empty();

代码示例

cpp 复制代码
void testList03() {

 list<int> l;
 l.push_back(10);
 l.push_back(20);
 l.push_back(30);
 l.push_back(40);
 printList(l);

 if (l.empty()) {
  cout << "list为空"<<endl;
 }
 else {
  cout << "list大小" << l.size()<<endl;//4
 }

 l.resize(10);
 printList(l);//10 20 30 40 0 0 0 0 0 0
 l.resize(11,6);
 printList(l);//10 20 30 40 0 0 0 0 0 0 6

}

插入和删除

  1. push_back():尾部插入元素;
  2. pop_back():删除最后一个元素;
  3. push_front():头部插入元素;
  4. pop_front():删除第一个元素;
  5. insert():插入;
  6. clear():清空;
  7. remove():删除;
  8. erase():删除;

代码示例

cpp 复制代码
void testList04() {

 list<int> l;
 //尾插
 l.push_back(10);
 l.push_back(20);
 l.push_back(30);
 l.push_back(40);

 //头插
 l.push_front(100);
 l.push_front(200);
 l.push_front(300);
 printList(l); //300 200 100 10 20 30 40

 //删除第一个
 l.pop_front();
 printList(l);//200 100 10 20 30 40
 //删除最后一个
 l.pop_back();
 printList(l);//200 100 10 20 30

 //insert插入
 list<int>::iterator it = l.begin();
 it++;
 l.insert(it,1000);
 printList(l); //200 1000 100 10 20 30

 it = l.begin();
 //删除
 l.erase(it);
 printList(l);//1000 100 10 20 30

 //移除容器中所有与该值匹配的元素
 l.remove(1000);
 printList(l);//100 10 20 30

 //清空
 l.clear();
}

数据存取

  1. front():返回第一个元素;
  2. back():返回最后一个元素;
  3. list不可以使用at()方法来获取数据 ,也不可以使用\[\];

代码示例

cpp 复制代码
void testList05() {


 list<int> l;
 //尾插
 l.push_back(10);
 l.push_back(20);
 l.push_back(30);
 l.push_back(40);

 cout<<"第一个元素"<<l.front()<<endl;//10
 cout << "最后一个元素" << l.back() << endl; //40
}

反转和排序

  1. reverse():反转链表;
  2. sort():排序,默认升序;

代码示例

cpp 复制代码
bool myCompare(int v1, int v2) {
 //降序
 return v1 > v2;
}

void testList06() {

 list<int> l;
 //尾插
 l.push_back(10);
 l.push_back(20);
 l.push_back(30);
 l.push_back(40);
 printList(l);//10 20 30 40

 l.reverse();
 printList(l);//40 30 20 10

 l.push_back(66);
 l.push_back(4);
 printList(l);//40 30 20 10 66 4
//默认升序 
l.sort();
 printList(l);//4 10 20 30 40 66
 //降序
 l.sort(myCompare);
 printList(l);//66 40 30 20 10 4

}
相关推荐
权球物联分享物联网连接服务5 分钟前
移动护理车物联网卡怎么选?筑牢智慧医疗床边数据传输根基
物联网
宵时待雨9 分钟前
linux笔记归纳25:多路转接epoll
linux·服务器·网络·c++
奋发向前wcx11 分钟前
CSP-J复赛模拟赛1 王晨旭补题 2026.10.2
java·开发语言
周杰伦fans18 分钟前
轻量模型高并发推理优化技巧
开发语言·人工智能·c#
Frank_refuel21 分钟前
【C++项目】手撕JRpc框架(单机怎么优化到分布式思想)
开发语言·c++
ShineWinsu31 分钟前
对于Redis:Hash类型的解析
c++·redis·分布式·缓存·面试·hash·哈希表
wuminyu34 分钟前
JEP491中synchronized关键字引发的平台线程钉住解决方法简介
java·linux·c语言·jvm·c++
可乐鸡翅yeah_39 分钟前
fmp4 碎片 MP4 格式 HLS 流,和传统 TS 分片有什么不一样
开发语言·javascript·ios·音视频·safari·m3u8·m3u8在线播放
流形填表42 分钟前
多校区题库标准化:Excel模板与校验脚本
开发语言·python
All for pursuit.44 分钟前
【贪心-4】581.最短无序连续子数组
数据结构·c++·算法·leetcode