#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;
}
链表笔记【祭1024程序员节】
最新推荐文章于 2024-07-12 10:45:15 发布