96SEO 2026-02-19 08:31 8
是可以在常数范围内在任意位置进行插入和删除的序列式容器其底层是带头双向循环链表list

系列容器的接口使用一样这里我就不再详细介绍具体使用细节可以查看
函数声明-接口说明push_front在list首元素前插入值为val的元素pop_front删除list中第一个元素push_back在list尾部插入值为val的元素pop_back删除list中最后一个元素insert在list
position位置的元素swap交换两个list中的元素clear清空list中的有效元素
中的指定元素unique链表去重merge合并两个链表sort链表排序reverse链表逆置
提供了这些具有特殊功能的接口它们也确实有一定的作用但是实际上这些特殊接口使用频率非常低包括
接口但是其使用频率仍然非常低这是由于链表排序的效率太低了我们可以通过对比两组测试数据来直观的感受链表排序的效率。
rand();v.push_back(e);lt.push_back(e);}//vector
rand();lt1.push_back(e);lt2.push_back(e);}//list
//拷贝{v.push_back(e);}sort(v.begin(),
每个节点的物理地址是不相关的所以插入的新节点并不会影响原来其他节点的地址
删除节点会直接将该节点释放掉此时我们再访问该节点就会造成越界访问。
我们知道迭代器是类似于指针一样的东西即迭代器要能够实现指针相关的全部或部分操作
等操作的所以我们需要用结构体/类来对迭代器进行封装再配合运算符重载等操作让迭代器能够实现解引用、、--
//类成员变量__list_iterator(link_type
类然后在类内配合运算符重载、模板等操作使得迭代器支持指针的各种行为
会有三个模板参数我们会在下面模拟实现中具体解释当前我们只需要理解其第一个模板参数
//节点指针作为类的唯一成员变量__list_iterator(node*
//节点指针作为类的唯一成员变量__list_iterator(node*
//节点指针作为类的唯一成员变量__list_const_iterator(node*
_pnode-_data;}__list_const_iteratorT
函数的返回值不同以外其他地方完全相同这就会造成严重的代码冗余。
const_iterator;//STL源码中大佬的写法利用多个模板参数来避免副本造成的代码冗余问题
//这里进行重命名是为了后续再添加模板参数时只用修改这一个地方node*
//节点指针作为类的唯一成员变量__list_iterator(node*
。
(注意在类内不管是否存在模板类名都等于类型不过为了混淆我们不建议这样使用)
所以我们可以通过传递不同的模板参数来让编译器实例化出两个不同的类对于上面的类来说表现如下
从最初的迭代器源码中我们可以看到源码中迭代器类有三个模板参数下面我们来引出这第三个参数。
的方式来获取结构体成员但是这样用非常别扭因为迭代器是模拟指针的行为而结构体指针访问数据的方式是
类的对象)而只有结构体指针才能像上面那样访问成员所以我们需要利用运算符重载让
it.operator-()-_row:it.operator-()-_colendl;如上由于
//STL源码中大佬的写法利用多个模板参数来避免副本造成的代码冗余问题
//这里进行重命名是为了后续再添加模板参数时只用修改这一个地方node*
//节点指针作为类的唯一成员变量__list_iterator(node*
迭代器类的模拟实现至于其他的一些成员函数比如构造、赋值重载、析构等都比较简单这里我就直接给出最终代码了大家可以对照着自己模拟实现的代码看一看。
_next;//不加T也没错但是写上好一些list_nodeT*
const_iterator;//STL源码中大佬的写法利用多个模板参数来避免副本造成的代码冗余问题templateclass
//这里进行重命名是为了后续再添加模板参数时只用修改这一个地方node*
//节点指针作为类的唯一成员变量__list_iterator(node*
iterator(_head-_next);}iterator
iterator(_head);}const_iterator
const_iterator(_head-_next);}const_iterator
//构造不是listT的原因构造函数函数名和类名相同而listT是类型empty_initialize();}//迭代器区间构造template
InputIteratorlist(InputIterator
last){push_back(*first);first;//first;}}//拷贝构造传统写法//list(const
官方库是这样写的这是由于在类内类名等价于类型但不建议自己这样写list(const
//初始化头结点防止交换后tmp野指针不能正常的调用析构listT
lt.end());swap(tmp);}//赋值重载传统写法//listT
//不能加引用lt是调用拷贝构造生成的swap(lt);return
//交换两个链表本质上是交换两个链表的头结点std::swap(_head,
lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);lt.push_back(4);lt.insert(lt.begin(),
lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);lt.push_back(4);lt.push_front(10);lt.push_front(20);lt.push_front(30);lt.pop_back();lt.pop_back();lt.pop_back();lt.pop_front();lt.pop_front();for
lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);lt.push_back(4);for
lt1(lt);//默认是浅拷贝,指向同一块lt.pop_back();lt.pop_back();for
lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);lt.push_back(4);listint::iterator
1);lt.push_back(p1);lt.push_back(p1);lt.push_back(p1);lt.push_back(Pos(2,
//编译器为了可读性做了特殊处理省略了一个-,//那么省略之前应该是it--_row//cout
{//test_list1();//test_list2();//test_list3();//test_list4();test_list5();return
的区别其实就是顺序表和链表的区别但是由于相较于数据结构初阶我们又增添了
--vector-list底层结构动态顺序表一段连续空间带头结点的双向循环链表随机访问支持随机访问访问某个元素效率
O(N)插入和删除任意位置插入和删除效率低需要搬移元素时间复杂度为
O(N)插入时有可能需要增容增容开辟新空间拷贝元素释放旧空间导致效率更低任意位置插入和删除效率高不需要搬移元素时间复杂度为
O(1)空间利用率底层为连续空间不容易造成内存碎片空间利用率高缓存利用率高底层节点动态开辟小节点容易造成内存碎片空间利用率低缓存利用率低迭代器原生态指针对原生态指针
进行封装迭代器失效在插入元素时要给所有的迭代器重新赋值因为插入元素有可能会导致重新扩容致使原来迭代器失效删除时当前迭代器需要重新赋值否则会失效插入元素不会导致迭代器失效删除元素时只会导致当前迭代器失效其他迭代器不受影响使用场景需要高效存储支持随机访问不关心插入删除效率大量插入和删除操作不关心随机访问
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback