C++容器之list基本使用

目录

前言

一、list的介绍?

二、使用

1.list的构造

[2.list iterator的使用](#2.list iterator的使用)

[3.list capacity](#3.list capacity)

[🥇 empty](#🥇 empty)

🥇size

[4.list element access](#4.list element access)

[🥇 front](#🥇 front)

[🥇 back](#🥇 back)

[5.list modifiers](#5.list modifiers)

[🥇 push_front](#🥇 push_front)

[🥇 pop_front](#🥇 pop_front)

​编辑

[🥇 push_back](#🥇 push_back)

[🥇 pop_back](#🥇 pop_back)

[🥇 insert](#🥇 insert)

[🥇 erase](#🥇 erase)

[🥇 swap](#🥇 swap)

​编辑

[🥇 clear](#🥇 clear)

6.list的迭代器失效

总结



前言

本文讲介绍C++中重要的容器list他的常见接口,并且会介绍list和vector的区别


一、list的介绍?

list容器其实是一个带头节点的双向循环链表。下边是list的文档介绍

list的文档介绍

二、使用

1.list的构造

|----------------------------------------------|-----------------------------|
| 构造函数 | 接口说明 |
| list(sizt_t n,const T& val=T()) | 构造的list中包含n个val的值 |
| list() | 构造空的list |
| list(const list& x) | 构造拷贝函数 |
| list(Inputiterator first,Inputiterator last) | 用[first,last]区间中的元素构造list |

2.list iterator的使用

可以暂时将迭代器理解成一个指针,该指针指向list中的某个节点,但是实际上list的迭代器实现相比于string和vector会更复杂一下。

|-------------|--------------------------------------------------------------------------|
| 函数声明 | 接口说明 |
| begin+end | 返回第一个元素的迭代器+最后一个元素下一个位置的迭代器 |
| rbegin+rend | 返回第一个元素的reverse_iterator,即end位置,返回最后一个元素下一个位置的reverse_iterator,即begin位置。 |

注意:

1.begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动

2.rbegin(end)与rend(begin)为反向迭代器,对迭代器执行++操作,迭代器向前移动。


3.list capacity

|-------|------------------------------|
| 函数声明 | 接口说明 |
| empty | 检测list是否为空,空返回true,否则返回false |
| size | 返回list中有效的节点个数 |

🥇 empty

🥇size

4.list element access

|-------|--------------------|
| 函数声明 | 接口说明 |
| front | 返回list的第一个节点中值的引用 |
| back | 返回list的最后一个节点中值的引用 |

🥇 front

🥇 back

5.list modifiers

|------------|----------------------------|
| 函数声明 | 接口说明 |
| push_front | 在list首元素前插入值为val的元素 |
| pop_front | 删除list中第一个元素 |
| push_back | 在list尾部插入值为val的元素 |
| pop_back | 删除list中最后一个元素 |
| insert | 在list position位置插入值为val的元素 |
| erase | 删除list position位置的元素 |
| swap | 交换两个list中的元素 |
| clear | 清空list中的有效元素 |

🥇 push_front

🥇 pop_front

🥇 push_back

🥇 pop_back

🥇 insert

🥇 erase

🥇 swap

🥇 clear

list其他的操作,可以查看list的文档说明 。

6.list的迭代器失效

前面说过,此处大家可将迭代器暂时理解成类似于指针, 迭代器失效即迭代器所指向的节点的无
效,即该节点被删除了 。因为 list 的底层结构为带头结点的双向循环链表 ,因此 list 中进行插入
时是不会导致 list 的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭
代器,其他迭代器不会受到影响

复制代码
void TestListIterator1()
{
	int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
	list<int> l(array, array + sizeof(array) / sizeof(array[0]));
	auto it = l.begin();
	while (it != l.end())
	{
		// erase()函数执行后,it所指向的节点已被删除,因此it无效,在下一次使用it时,必须先给
		其赋值
			l.erase(it);
		++it;
	}
}
// 改正
void TestListIterator()
{
	int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
	list<int> l(array, array + sizeof(array) / sizeof(array[0]));
	auto it = l.begin();
	while (it != l.end())
	{
		l.erase(it++); // it = l.erase(it);
	}
}

总结

以上就是list容器的基本使用,希望可以帮助到大家,希望大家动动发财的小手点一下小赞,谢谢大家!!!!!!!

相关推荐
荒川之神2 分钟前
拉链表概念与基本设计
java·开发语言·数据库
chushiyunen12 分钟前
python中的@Property和@Setter
java·开发语言·python
小樱花的樱花18 分钟前
C++ new和delete用法详解
linux·开发语言·c++
froginwe1120 分钟前
C 运算符
开发语言
fengfuyao9851 小时前
低数据极限下模型预测控制的非线性动力学的稀疏识别 MATLAB实现
开发语言·matlab
摇滚侠1 小时前
搭建前端开发环境 安装 nodejs 设置淘宝镜像 最简化最标准版本 不使用 NVM NVM 高版本无法安装低版本 nodejs
java·开发语言·node.js
t198751281 小时前
MATLAB十字路口车辆通行情况模拟系统
开发语言·matlab
yyk的萌1 小时前
AI 应用开发工程师基础学习计划
开发语言·python·学习·ai·lua
Amumu121382 小时前
Js:正则表达式(一)
开发语言·javascript·正则表达式
努力的章鱼bro2 小时前
操作系统-FileSystem
c++·操作系统·risc-v·filesystem