链表笔记【祭1024程序员节】

#include <bits/stdc++.h>
using namespace std;
#define MAX(a, b) ((a)>(b)?(a):(b))
#pragma GCC optimize(3,"Ofast","inline")
list<int> q;
int main() {
	//迭代器操作篇

	auto ita=q.begin();//将迭代器 ita 初始化至链表 q 的第一个位置
	/*注:auto是 C++11 引入的关键字,用于自动推断变量的类型。
	      当使用 auto 关键字声明变量时,编译器根据变量的初始化表达式推导出变量的类型,无需明确指定类型。*/
	auto itb=q.end();//将迭代器 itb 初始化至链表 q 的最后一个位置的后一个位置
	/*注:之所以begin()是链表的第一个位置,而 end() 是链表的最后一个位置的后一个位置,
	      是因为 end() 函数返回的迭代器指向的是容器的尾后迭代器,代表的是一个不存在的元素位置,它标记了容器的结束位置。*/

	auto it=q.begin();
	++it;//将迭代器 it 前进到下一个位置

	auto it=q.begin();
	--it;//将迭代器 it 前进到上一个位置

	auto it=q.begin();
	cout<<*it<<endl;//输出迭代器 it 指向的当前元素的引用

	auto ita=q.begin(),itb=q.begin();
	cout<<ita==itb<<endl;//如果迭代器 it1 和 it2 指向相同的位置,返回 true;否则返回 false

	auto ita=q.begin(),itb=q.begin();
	cout<<ita!=itb<<endl;//如果迭代器 it1 和 it2 指向不同的位置,返回 true;否则返回 false

	int n=2;
	auto itc=next(q.begin(),n);//next用于获取 q.begin() 的往后 n 个位置的迭代器 时间复杂度为 O(n)

	auto itd=q.begin();
	int n=2;
	advance(itd,n);//将迭代器 it向后移动 n 步 n 可以为负 时间复杂度为 O(n)


	//链表操作篇

	q.push_front(2);//在表头部添加一个元素

	q.push_back(3);//在链表末尾添加一个元素

	q.pop_front();//在链表头部删除一个元素

	q.pop_back();//在链表末尾删除一个元素

	cout<<q.empty()<<endl;//判断链表是否为空,若为空,返回 true ,反之,返回 false

	cout<<q.size()<<endl;//输出链表中的个数

	cout<<q.begin()<<endl;//返回链表头部的元素引用
	
	cout<<q.end()<<endl;//返回链表末尾的元素引用
	
	q.clear();//移除链表中所有的元素
	
	    auto it=q.begin();
	for(; it!=q.end(); ++it)cout<<*it<<" "; //输出链表所有元素 注意,it 是!=q.end(),输出时是输出 *it
	cout<<endl;

	int n=2,m=3;
	auto ita=q.begin(),itb=q.begin();
	advance(ita,n-1);
	for(; ita!=itb; ++ita)cout<<*ita<<" "; //输出链表 n ~ m 区间内的所有元素
	cout<<endl;

	//在链表的特定位置插入元素
	auto it = next(q.begin());
	q.insert(it, 4);
	// 或者插入一个范围内的元素
	vector<int> a = {5, 6};
	q.insert(it, a.begin(), a.end());

	//在链表的特定位置移除元素
	auto it = next(q.begin(),2);
	q.erase(it);
	// 或者在一个范围内移除元素
	auto start=next(q.begin(),2);
	auto end=next(q.begin(),3);
	q.erase(start,end);

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值