当前位置: 首页 > news >正文

C++ STL 容器与算法详解

容器

序列容器

  1. vector:动态数组,支持快速随机访问

    • 特点:内存连续分配,末尾插入/删除高效
    • 典型操作:push_back(), pop_back(), insert()
    • 应用场景:需要随机访问且大小经常变化的序列
  2. deque:双端队列,支持首尾高效插入/删除

    • 特点:分段连续存储,两端操作高效
    • 典型操作:push_front(), push_back(), pop_front()
    • 应用场景:队列和栈的结合体,如滑动窗口
  3. list:双向链表

    • 特点:非连续存储,任意位置插入/删除高效
    • 典型操作:splice(), merge(), sort()
    • 应用场景:频繁在中间插入/删除的场景

关联容器

  1. set:有序集合

    • 特点:元素唯一,自动排序(默认升序)
    • 典型操作:insert(), find(), lower_bound()
    • 应用场景:需要维护有序且唯一的元素集合
  2. map:键值对集合

    • 特点:键唯一,按键排序
    • 典型操作:operator[], find(), count()
    • 应用场景:字典、哈希表替代(需要有序时)

无序关联容器

  1. unordered_set:哈希集合

    • 特点:元素唯一,基于哈希表实现
    • 典型操作:insert(), find(), count()
    • 应用场景:需要快速查找且不关心顺序
  2. unordered_map:哈希映射

    • 特点:键唯一,基于哈希表实现
    • 典型操作:operator[], find(), count()
    • 应用场景:需要快速键值查找且不关心顺序

容器适配器

  1. stack:后进先出(LIFO)容器

    • 底层实现:默认基于deque
    • 典型操作:push(), pop(), top()
    • 应用场景:函数调用栈、表达式求值
  2. queue:先进先出(FIFO)容器

    • 底层实现:默认基于deque
    • 典型操作:push(), pop(), front()
    • 应用场景:任务调度、BFS算法
  3. priority_queue:优先队列

    • 底层实现:默认基于vector
    • 典型操作:push(), pop(), top()
    • 应用场景:Dijkstra算法、任务优先级调度

算法

非修改序列算法

  1. find:查找特定值

    • 示例:auto it = find(v.begin(), v.end(), 42);
    • 复杂度:O(n)
  2. count:统计元素出现次数

    • 示例:int n = count(v.begin(), v.end(), value);
  3. for_each:对每个元素应用函数

    • 示例:for_each(v.begin(), v.end(), [](int x){...});
  4. count_if:条件统计

    • 示例:int n = count_if(v.begin(), v.end(), [](int x){return x>10;});
  5. find_if:条件查找

    • 示例:auto it = find_if(v.begin(), v.end(), [](int x){return x%2==0;});

修改序列算法

  1. copy:复制序列

    • 示例:copy(src.begin(), src.end(), dest.begin());
  2. fill:填充序列

    • 示例:fill(v.begin(), v.end(), 0);
  3. reverse:反转序列

    • 示例:reverse(v.begin(), v.end());
  4. remove:移除特定元素

    • 示例:auto new_end = remove(v.begin(), v.end(), value);
  5. unique:去除相邻重复元素

    • 示例:auto new_end = unique(v.begin(), v.end());
  6. rotate:旋转序列

    • 示例:rotate(v.begin(), v.begin()+3, v.end());

排序与相关算法

  1. sort:快速排序

    • 示例:sort(v.begin(), v.end());
    • 复杂度:O(n log n)
  2. binary_search:二分查找

    • 示例:bool found = binary_search(v.begin(), v.end(), value);
  3. stable_sort:稳定排序

    • 特点:保持相等元素的相对顺序
  4. lower_bound:查找第一个不小于给定值的元素

    • 示例:auto it = lower_bound(v.begin(), v.end(), value);
  5. upper_bound:查找第一个大于给定值的元素

    • 示例:auto it = upper_bound(v.begin(), v.end(), value);
  6. next_permutation:生成下一个排列

    • 示例:while(next_permutation(v.begin(), v.end())){...}

数值算法

  1. accumulate:累加

    • 示例:int sum = accumulate(v.begin(), v.end(), 0);
  2. partial_sum:部分和

    • 示例:partial_sum(v.begin(), v.end(), output.begin());

集合算法

  1. set_union:并集

    • 示例:set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), output.begin());
  2. set_intersection:交集

    • 示例:set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), output.begin());

堆算法

  1. make_heap:构建堆

    • 示例:make_heap(v.begin(), v.end());
  2. push_heap:向堆中添加元素

    • 示例:v.push_back(value); push_heap(v.begin(), v.end());
  3. pop_heap:从堆中移除元素

    • 示例:pop_heap(v.begin(), v.end()); v.pop_back();

洛谷习题推荐

容器相关

序列容器
  1. P3613:vector基本操作
  2. P1996:约瑟夫问题(list模拟)
  3. P1540:LRU缓存(deque/queue实现)
  4. P1177:排序(vector + sort)
关联容器
  1. P4325:set基本操作
  2. P1102:map应用(统计词频)
  3. P3156:unordered_map应用
  4. P2234:set + lower_bound/upper_bound
容器适配器
  1. P1090:priority_queue应用(合并果子)
  2. P4387:stack应用(表达式求值)
  3. P3378:priority_queue实现堆

算法相关

非修改序列算法
  1. P1469:count/for_each应用
  2. P2670:find_if/count_if应用
修改序列算法
  1. P1918:reverse应用
  2. P1202:fill/copy应用
排序与相关算法
  1. P1223:sort/stable_sort应用
  2. P1873:sort + lower_bound应用
  3. P1068:排序应用
堆算法
  1. P1090:make_heap/push_heap/pop_heap应用
  2. P1792:堆算法综合应用

http://www.dtcms.com/a/526656.html

相关文章:

  • 网站推广途径和推广要点的案例讨论杭州市建设工程交易中心网站
  • 网站之间的区别中铁建设集团有限公司西南分公司
  • 做dj音乐网站漳州商城网站建设
  • 网站建设实验报告手写上海网站建设 知名觉
  • 网站功能设计建设通账号
  • 图片网站怎样选择虚拟主机网站改版后 存在大量404页面
  • 华为云速建站教程wordpress获取别名
  • 做中考试卷的网站企业网站的首页
  • iis配置wap网站外贸型网站
  • 深圳东莞的网站建设公司手机端开发工具
  • 设计高端网站易语言可以做网站吗
  • 企业产品做哪个网站推广好谷歌seo培训
  • 六安有哪些做网站的公司微信怎么创建小程序?
  • 数字化转型:概念性名词浅谈(第七十九讲)
  • 现在1做啥网站流量大最专业的手机网站建设
  • 开一个做网站的公司赚钱吗做网站能接到模具单吗
  • 可以用自己的电脑做网站主机wordpress主题不能用
  • 有哪些好的做问卷调查的网站做网站时如何上传图片
  • 中山专业网站制作苏州出名的网站公司
  • 网站上传附件目录格式计算机ui设计是什么
  • 2025年CIE SCI2区TOP,灾害响应中医疗资源的战略分配:考虑风险与成本的多目标非线性动态模型,深度解析+性能实测
  • 点击图片进入网站怎么做淘宝客网站备案信息
  • 做柱状图好看的网站工商公示信息查询系统官网
  • ck播放器做解析网站长沙建站优化
  • dede二手车网站源码wordpress后台登陆500错误
  • 广州专业找人见人付款昆明网站seo
  • 对称加密AES
  • 做网站商城多少钱网站初始开发的步骤
  • 建设银行人力资源招聘网站网站建设 麻烦吗
  • 建设解锁卡网站首页重庆必打卡的7个景点