C++学习:list

1.list的定义和结构

list的使用频率不高,在做题时几乎遇不到需要使用list的情景。list是一种双向链表容器,它是标准模板库(STL)提供的一种序列容器。list容器以节点(node的形式存储元素,并使用指针将这些节点链接在一起,形成一个链表结构。list容器结构如下:

list容器模板接受两个参数:

1.T:指定容器中存储的元素类型。 list<int>

2.Allocator(可选):指定用于分配内存的分配器类型,默认为std::allocator<T>
一般不用填

list容器的特点包括:·双向性:每个节点都包含指向前一个节点和后一个节点的指针,因此可以在常数时间内在链表中的任意位置进行插入、删除和访问操作。动态大小:链表的大小可以根据需要动态扩展或收缩,不需要预先指定容器的大小。

不连续存储:链表中的节点可以在内存中的任意位置分布,不要求连续存储,因此插入和删除操作不会导致元素的移动 。如 1 22 33 35 63...

list容器提供了一系列成员函数和迭代器来操作和访问链表中的元素,包括插入删除、访问、反转等操作。可以使用迭代器来遍历链表中的元素。

c++ 复制代码
#include <iostream>
#include<list>
int main(){
	std::list<int> mylist;
// 在链表尾部插入元素
	myList.push_back(1);
	myList.push_back(2);
	myList.push_back(3);
// 在链表头部插入元素myList.push front(@);
//遍历链表并输出元素
	for(int num :myList)
	{std::cout<< num << " ";}
	std::cout << std::endl;
	return 0;
}

在上述示例中,我们首先创建了一个list容器myList,然后使用push_back()和push_front()函数分别在链表尾部和头部插入元素。最后,使用范围基于范围的for循环遍历链表并输出元素。需要注意的是,由于list是双向链表,因此插入和删除操作的时间复杂度是常量时间O(1),但访问和查找操作的时间复杂度是线性时间O(n),其中n是链表的大小。因此,如果需要频繁进行随机访问操作,可能更适合使用支持随机访问的容器,如vector或deque(双端队列)

list容器提供了多个常用的成员函数来操作和访问链表中的元素以下是一些常用的list函数的解释:

1.push_back():将元素插入到链表的末尾。

2.push front():将元素插入到链表的开头。

3.pop back():移除链表末尾的元素。

4.pop front():移除链表开头的元素。

5.size():返回链表中元素的个数。

6.empty():检查链表是否为空。

7.clear():清空链表中的所有元素。

8.front():返回链表中第一个元素的引用。

9.back():返回链表中最后一个元素的引用。

10.begin():返回指向链表第一个元素的迭代器。

11.end():返回指向链表末尾的下一个位置的迭代器。

12.insert():在指定位置之前插入一个或多个元素。

13.erase():从链表中移除指定位置的一个或多个元素。

c++ 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(void) {
	//创建一个list<int>对象myList
	list<int>myList;
	//向myList尾部添加元素
	for (int i = 1; i <= 5; ++i)
		myList.push_back(i);


	//从头到尾输出myList中的元素
	for (const auto& i : myList)
		cout << i << ' ';
	cout << '\n';


	//将mylist中的元素反转
	reverse(myList.begin(), myList.end());


	for (const auto& i : myList)
		cout << i << ' ';
	cout << '\n';


	//在第一个元素的后一个位置加上元素0
	myList.insert(++myList.begin(), 0);

	for (const auto& i : myList)
		cout << i << ' ';
	cout << '\n';

	myList.erase(++++myList.begin(), --myList.end());
	//输出myList的大小
	cout << "链表大小为:" << myList.size() << '\n';

		//从头到尾输出myList中的元素
	for (const auto& i : myList)
		cout << i << ' ';
		cout << '\n';
	return 0;
}

迭代器相当于是一个指针

相关推荐
leegong2311111 分钟前
学习PostgreSQL专家认证
数据库·学习·postgresql
Moonnnn.1 小时前
51单片机学习——动态数码管显示
笔记·嵌入式硬件·学习·51单片机
黑子哥呢?1 小时前
安装Bash completion解决tab不能补全问题
开发语言·bash
青龙小码农1 小时前
yum报错:bash: /usr/bin/yum: /usr/bin/python: 坏的解释器:没有那个文件或目录
开发语言·python·bash·liunx
大数据追光猿1 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
Dream it possible!1 小时前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
夏末秋也凉1 小时前
力扣-回溯-46 全排列
数据结构·算法·leetcode
南宫生1 小时前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
柠石榴2 小时前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯
王老师青少年编程2 小时前
【GESP C++八级考试考点详细解读】
数据结构·c++·算法·gesp·csp·信奥赛