首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >赴一场与STL库list的约会:只为见你最美一面

赴一场与STL库list的约会:只为见你最美一面

作者头像
用户11456817
发布于 2025-05-28 00:47:42
发布于 2025-05-28 00:47:42
4100
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行

底层实现是一个双链表,它的插入与删除操作时间复杂度为o(1)。

list的迭代器是双向迭代器,允许++--操作,

像string、vector容器是随机迭代器,允许++--+-操作,

像forwad_list是随机迭代器,只允许++操作

list的使用:

list容器提供的许多的接口,如:
list构造函数:
n个val构造:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<list>
using namespace std;
int main()
{
	list<int>i1(10, 1);
	for (auto x:i1)//输出10个1
	{
		cout << x << " ";
	}
	return 0;
}
空构造:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<list>
using namespace std;
int main()
{
	list<int>i1;
	return 0;
}
拷贝构造:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<list>
using namespace std;
int main()
{
	list<int>i1;
	return 0;
}
迭代器区间构造:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<list>
using namespace std;
int main()
{
	list<int>i1 = {1,2,3,4,5,6};
    list<int>i2(i1.begin(),i1.end());
    for (auto x:i2)
    {
      cout << x << " ";
    }
	return 0;
}

list迭代器使用:

迭代器这里可以暂时理解为指针,像指针一样指向list的节点

begin(),end()迭代器:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//正向迭代器
list<int>i1 = {1,2,3,4,5,6};
list<int>::iterator it1 = i1.begin();
while (it1!=i1.end())
{
	cout << *it1 << " ";
	++it1;
}
rbegin(),rend()迭代器:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*除了forward_list容器之外,其他容器都支持反向迭代器
反向迭代器
1.定义:

在容器中从尾元素向首元素反向移动的迭代器

对于反向迭代器,递增和递减的含义会颠倒过来

递增一个反向迭代器会移动到前一个元素

递减一个迭代器会移动到下一个元素*/
----------------------------------
/*
  rbegin(),指向一组元素的最后一个元素的位置
  rend(),指向第一个元素的前一个位置
*/
  
list<int>i1 = { 1,2,3,4,5,6 };
for (auto it=i1.rbegin();it!=i1.rend();it++)
{
	cout << *it << " ";
}
---------------------------------
list<int>i1 = {1,2,3,4,5,6};
list<int>::reverse_iterator it1 = i1.rbegin();
while (it1!=i1.rend())
{
	cout << *it1 << " ";
	++it1;
}

list常用接口:

empty():
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
list<int>i1 = {1,2,3,4,5};
if (i1.empty())
{
	cout << "true" << endl;
}
else
{
	cout << "0" << endl;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//返回list中有效节点个数
list<int>i1 = {1,2,3,4,5};
cout << i1.size() << endl;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//返回list第一个元素值的引用
list<int>i1 = {1,2,3,4,5};
cout << i1.front() << endl;
//返回list最后一个元素值的引用
list<int>i1 = {1,2,3,4,5};
cout << i1.back() << endl;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//insert
/*
在迭代器位置插入一个值
在迭代器位置插入n个值
在迭代器位置插入一个迭代器区间的值
*/

迭代器失效:

对于vector,迭代器失效是当vector进行扩容是,原迭代器还指向就空间的位置,没有更新,所以导致失效,如果像正常访问这个迭代器,就需要更新一下迭代器的位置

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • list的使用:
    • list容器提供的许多的接口,如:
      • list构造函数:
  • list迭代器使用:
    • begin(),end()迭代器:
    • rbegin(),rend()迭代器:
  • list常用接口:
    • empty():
  • 迭代器失效:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档