电子商务网站建设费用预算,网站分站代理,h5类型的网站是怎么做的,网站版式有哪几种csp信奥赛C标准模板库STL#xff08;2#xff09;#xff1a;deque的使用详解 一、deque基本概念
1.1 什么是deque
deque#xff08;double-ended queue#xff0c;双端队列#xff09;是一种可以在两端进行高效插入和删除操作的序列容器结合了vector和list的优点…csp信奥赛C标准模板库STL2deque的使用详解一、deque基本概念1.1 什么是dequedequedouble-ended queue双端队列是一种可以在两端进行高效插入和删除操作的序列容器结合了vector和list的优点支持随机访问类似vector同时在两端有高效的插入/删除类似list1.2 内部实现原理// deque的内部结构可以理解为// 由多个固定大小的数组块buffer组成// 通过一个中央控制器map来管理这些数组块二、deque的声明和初始化2.1 头文件和声明#includedequeusingnamespacestd;// 基本声明方式dequeintdq1;// 空dequedequeintdq2(5);// 包含5个0dequeintdq3(5,10);// 包含5个10dequeintdq4{1,2,3,4,5};// 列表初始化// 从其他容器复制dequeintdq5(dq4.begin(),dq4.end());dequeintdq6(dq3);// 拷贝构造三、deque的核心操作3.1 访问元素dequeintdq{1,2,3,4,5};// 随机访问O(1)coutdq[2]endl;// 访问索引2输出3coutdq.at(2)endl;// 带边界检查越界会抛出异常// 访问首尾元素coutdq.front()endl;// 1首元素coutdq.back()endl;// 5尾元素3.2 插入操作dequeintdq{1,2,3};// 头部插入O(1)dq.push_front(0);// dq: 0, 1, 2, 3// 尾部插入O(1)dq.push_back(4);// dq: 0, 1, 2, 3, 4// 指定位置插入O(n)autoitdq.begin()2;dq.insert(it,99);// dq: 0, 1, 99, 2, 3, 4// 批量插入dq.insert(dq.begin()1,3,88);// 在位置1插入3个88// 从其他容器插入vectorintvec{111,222};dq.insert(dq.end(),vec.begin(),vec.end());3.3 删除操作dequeintdq{1,2,3,4,5,6};// 头部删除O(1)dq.pop_front();// 删除1剩余2,3,4,5,6// 尾部删除O(1)dq.pop_back();// 删除6剩余2,3,4,5// 指定位置删除O(n)autoitdq.begin()1;dq.erase(it);// 删除3剩余2,4,5// 删除区间O(n)dq.erase(dq.begin(),dq.begin()2);// 删除前2个剩余5// 清空所有元素dq.clear();3.4 大小和容量dequeintdq{1,2,3};coutdq.size()endl;// 元素个数3coutdq.empty()endl;// 是否为空false// deque没有capacity()函数因为它是动态分块的// 但可以调整大小dq.resize(5);// 调整为5个元素新增元素为0dq.resize(2);// 调整为2个元素删除多余元素四、迭代器使用4.1 正向和反向迭代器dequeintdq{1,2,3,4,5};// 正向迭代for(dequeint::iterator itdq.begin();it!dq.end();it){cout*it ;}// 反向迭代for(dequeint::reverse_iterator ritdq.rbegin();rit!dq.rend();rit){cout*rit ;}// C11范围for循环for(intnum:dq){coutnum ;}五、deque在信奥赛中的典型应用5.1 滑动窗口最大值单调队列// 题目求每个长度为k的滑动窗口中的最大值vectorintmaxSlidingWindow(vectorintnums,intk){vectorintresult;dequeintdq;// 存储下标for(inti0;inums.size();i){// 移除不在窗口内的元素if(!dq.empty()dq.front()i-k){dq.pop_front();}// 维护单调递减队列while(!dq.empty()nums[dq.back()]nums[i]){dq.pop_back();}dq.push_back(i);// 当窗口形成时记录结果if(ik-1){result.push_back(nums[dq.front()]);}}returnresult;}5.2 队列优化BFS双端队列BFS// 0-1 BFS边权只有0和1时的最短路径vectorintbfs01(intstart,vectorvectorpairint,intgraph){intngraph.size();vectorintdist(n,INT_MAX);dequeintdq;dist[start]0;dq.push_front(start);while(!dq.empty()){intudq.front();dq.pop_front();for(auto[v,w]:graph[u]){if(dist[u]wdist[v]){dist[v]dist[u]w;if(w0){dq.push_front(v);// 边权为0加入队首}else{dq.push_back(v);// 边权为1加入队尾}}}}returndist;}六、deque与其他容器的比较特性dequevectorlist随机访问O(1)O(1)O(n)头部插入/删除O(1)O(n)O(1)尾部插入/删除O(1)O(1)*O(1)中间插入/删除O(n)O(n)O(1)内存连续性部分连续完全连续不连续迭代器失效插入可能使所有迭代器失效插入可能使所有迭代器失效不影响其他迭代器注vector尾部插入均摊O(1)但可能需要重新分配内存七、性能特点和注意事项7.1 性能特点两端操作高效push_front()、pop_front()、push_back()、pop_back()都是O(1)随机访问高效通过下标访问元素是O(1)中间操作较慢在中间插入删除是O(n)7.2 注意事项// 1. 迭代器失效问题dequeintdq{1,2,3,4,5};autoitdq.begin()2;dq.push_front(0);// 可能导致所有迭代器失效// 此时使用it是危险的// 2. 与算法库结合使用#includealgorithmsort(dq.begin(),dq.end());// 可以排序reverse(dq.begin(),dq.end());// 可以反转// 3. 获取最大/最小值automax_itmax_element(dq.begin(),dq.end());automin_itmin_element(dq.begin(),dq.end());八、实战练习题8.1 基础练习实现一个支持前插入、后插入、随机访问的序列使用deque实现栈和队列8.2 中级练习滑动窗口最大值/最小值最大子数组和的滑动窗口版本单调队列优化DP问题8.3 高级应用0-1 BFS解决最短路径问题使用deque维护动态区间的最大值实现一个支持在两端高效操作的缓存结构总结deque是信奥赛中非常实用的数据结构特别适合需要同时从两端操作的问题。它的主要优势在于两端插入删除高效支持随机访问不需要预分配大量内存在解决滑动窗口、单调队列、BFS优化等问题时deque往往是最高效的选择。熟练掌握deque的使用能让你在竞赛中写出更优雅、更高效的代码。各种学习资料助力大家一站式学习和提升#includebits/stdc.husingnamespacestd;intmain(){cout########## 一站式掌握信奥赛知识! ##########;cout############# 冲刺信奥赛拿奖! #############;cout###### 课程购买后永久学习不受限制! ######;return0;}一、CSP信奥赛C通关学习视频课C语法基础C语法进阶C算法C数据结构CSP信奥赛数学CSP信奥赛STL二、CSP信奥赛C竞赛拿奖视频课信奥赛csp-j初赛高频考点解析CSP信奥赛C复赛集训课12大高频考点专题集训三、考级、竞赛刷题题单及题解GESP C考级真题题解CSP信奥赛C初赛及复赛高频考点真题解析CSP信奥赛C一等奖通关刷题题单及题解详细内容1、csp/信奥赛C完整信奥赛系列课程永久学习https://edu.csdn.net/lecturer/7901 点击跳转2、CSP信奥赛C竞赛拿奖视频课https://edu.csdn.net/course/detail/40437 点击跳转3、csp信奥赛冲刺一等奖有效刷题题解CSP信奥赛C初赛及复赛高频考点真题解析持续更新https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转2025 csp-j 复赛真题及答案解析最新更新2025 csp-x(山东) 复赛真题及答案解析最新更新2025 csp-x(河南) 复赛真题及答案解析最新更新2025 csp-x(辽宁) 复赛真题及答案解析最新更新2025 csp-x(江西) 复赛真题及答案解析最新更新2025 csp-x(广西) 复赛真题及答案解析最新更新2020 ~ 2024 csp 复赛真题题单及题解2019 ~ 2022 csp-j 初赛高频考点真题分类解析2021 ~ 2024 csp-s 初赛高频考点解析2023 ~ 2024 csp-x (山东)初赛真题及答案解析2024 csp-j 初赛真题及答案解析2025 csp-j 初赛真题及答案解析最新更新2025 csp-s 初赛真题及答案解析最新更新2025 csp-x (山东)初赛真题及答案解析(最新更新)2025 csp-x (江西)初赛真题及答案解析(最新更新)2025 csp-x (辽宁)初赛真题及答案解析(最新更新)CSP信奥赛C一等奖通关刷题题单及题解持续更新https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转129 道刷题练习和详细题解涉及模拟算法、数学思维、二分算法、 前缀和、差分、深搜、广搜、DP专题、 树和图4、GESP C考级真题题解GESP(C 一级二级三级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转GESP(C 四级五级六级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转· 文末祝福 ·#includebits/stdc.husingnamespacestd;intmain(){cout跟着王老师一起学习信奥赛C;cout 成就更好的自己 ;cout csp信奥赛一等奖属于你! ;return0;}