【嵌入式——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

}
相关推荐
oioihoii2 分钟前
从C++到C#的转型完全指南
开发语言·c++·c#
Ashley_Amanda5 分钟前
Python入门知识点梳理
开发语言·windows·python
区区一散修6 分钟前
Java进阶 6. 集合
java·开发语言
北京耐用通信9 分钟前
耐达讯自动化Profibus总线光纤中继器:破解石油化工分析仪器通讯难题
网络·人工智能·科技·物联网·网络协议·自动化·信息与通信
学嵌入式的小杨同学12 分钟前
C 语言实战:动态规划求解最长公共子串(连续),附完整实现与优化
数据结构·c++·算法·unity·游戏引擎·代理模式
-凌凌漆-19 分钟前
【JS】JavaScript Promise
开发语言·javascript·ecmascript
羊村积极分子懒羊羊20 分钟前
python课程三月二十九号粗略总结
开发语言·python
時肆48522 分钟前
Linux命令创意组合大赛:管道里的魔法
开发语言·性能优化
Traced back23 分钟前
C#/.NET 常用控件、属性、方法和语句大全(或许全)
开发语言·c#·.net
小欣加油24 分钟前
leetcode 174 地下城游戏
c++·算法·leetcode·职场和发展·动态规划