1.概论

C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在STL使用过程中,并不会感到陌生。

2.常见封装

1.容器(Containers):

  • std::vector: 动态数组,支持随机访问,可以高效添加和删除元素。

    链接:https://www.cnblogs.com/trmbh12/p/17787279.html
  • std::list: 双向链表,支持快速插入和删除元素。

    链接:https://www.cnblogs.com/trmbh12/p/17787408.html
  • std::deque: 双端队列,支持快速随机访问和在两端添加/删除元素。
  • std::set 和 std::multiset: 有序集合,不允许重复元素。
  • std::map 和 std::multimap: 关联容器,以键值对形式存储数据。
  • std::unordered_set, std::unordered_multiset, std::unordered_map, 和 std::unordered_multimap: 无序关联容器,使用哈希表实现。
  • std::stack: 栈数据结构,后进先出(LIFO)。
  • std::queue: 队列数据结构,先进先出(FIFO)。
  • std::priority_queue: 优先级队列,可以按照优先级高低访问元素。

2.迭代器(Iterators):

STL容器通常提供迭代器,允许遍历容器中的元素。迭代器有不同的类型,如正向迭代器、反向迭代器、常量迭代器等。

3.算法

STL提供了大量算法,包括排序、搜索、转换、归约、拷贝、移动等。这些算法可以用于各种容器。

一些常见的算法包括 std::sort, std::find, std::binary_search, std::transform, std::accumulate 等。

4.函数对象(Function Objects):

STL允许你创建自定义的函数对象(通常称为谓词),以在算法中指定特定的行为。例如,你可以自定义排序规则来使用 std::sort。

迭代器适配器(Iterator Adapters):

5.迭代器适配器(Iterator Adapters):

STL提供了迭代器适配器,如 std::back_inserter, std::front_inserter 和 std::inserter,用于在容器中执行插入操作。

6.智能指针(Smart Pointers):

std::shared_ptr, std::unique_ptr, 和 std::weak_ptr 提供了内存管理的智能指针,有助于防止内存泄漏和管理资源。

字符串和字符处理:

7.字符串和字符处理:

std::string 提供了字符串操作的高级接口,包括字符串连接、查找、替换等。

8.输入/输出流:

std::cin, std::cout, std::ifstream, std::ofstream, std::stringstream 等用于输入和输出的流对象。

C++封装数据结构的更多相关文章

  1. Redis基本数据类型底层数据结构

    Redis数据类型底层数据结构 Redis目前基本的数据类型有String.List.Set.ZSet.Hash五种,首先Redis是C语言开发的,所以底层就是用C语言封装数据结构或者C语言本身提供的 ...

  2. Java如何解决脆弱基类(基类被冻结)问题

    概述  大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends 关系).实际上80%的代码应该完全用interfaces写,而不是通过extends.“JAVA设计模式”一书详细阐述了怎样用 ...

  3. [WPF]GridView或DataGrid中自定义样式:依据某一列设定其对应行的样式(背景色,字体等)

    附效果照一张: 本方法使用StyleSelector来 获得依据自定义逻辑的style. ① class ConditionalStyleSelector : StyleSelector { publ ...

  4. Guava学习笔记:Immutable(不可变)集合

    不可变集合,顾名思义就是说集合是不可被修改的.集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变. 为什么要用immutable对象?immutable对象有以下的优点: 1.对不可靠的客 ...

  5. guava学习--集合2&Range

    转载:http://www.cnblogs.com/peida/p/Guava_ImmutableCollections.html Table: 当我们需要多个索引的数据结构的时候,通常情况下,我们只 ...

  6. PDF数据提取------3.解析Demo

    1.PDF中文本字符串格式中关键值信息抓取(已完成) 简介:这种解析比较传统最简单主要熟练使用Regular Expression做语义识别和验证.例如抓取下面红色圈内关键信息 string mett ...

  7. OC1_类与对象

    // // main.m // OC1_类与对象 // // Created by zhangxueming on 15/6/9. // Copyright (c) 2015年 zhangxuemin ...

  8. c语言技巧--长期更新

    1.   #define LOWER(c)            (unsigned char)(c | 0x20) 换成小写 2.   gcc -Wall -Werror //告警当成 错误来处理 ...

  9. .NETFramework类库

    .NET Framework 包括可加快和优化开发过程并提供对系统功能的访问的类.接口和值类型. 为了便于语言之间进行交互操作,大多数 .NET Framework 类型都符合 CLS,因而可在编译器 ...

  10. Immutable(不可变)集合

    Immutable(不可变)集合 不可变集合,顾名思义就是说集合是不可被修改的.集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变. 为什么要用immutable对象?immutable对 ...

随机推荐

  1. JavaScript数组及方法总结

    数组的创建方法 1.常规方式: var myCars=new Array(); myCars[0]="Saab"; myCars[1]="Volvo"; myC ...

  2. Java反序列化漏洞-URLDNS链分析

    目录 一.前置知识 反射 二.分析 1. URL 2. HashMap 3. 解决一些问题 反射修改字段值 三.POC 四.利用链 一.前置知识 菜鸟教程 Java 序列化 Java安全-反射 URL ...

  3. 如何用axios加后端数据库传值给前端

    小杰笔记: 如何用axios : 第一步:编写数据库实体类 @Data @AllArgsConstructor @NoArgsConstructor public class User { priva ...

  4. JPA复杂查询时间查询分页排序

    JPA复杂查询时间查询分页排序 JPA复杂查询时间查询分页排序,工作上用到,因为项目是jpa,记录.代码囊括了:查询条件+时间范围+分页+排序 其实我也不太想用jpa,但是他也有优点,操作可以兼容多种 ...

  5. 国产Geoscene Server 4.0编译SOE总结

    背景:公司一直使用Arcgis Server 10.1.Visual Studio 2010开发SOE功能,随着国产化软件发展大趋势,SOE中的各种分析功能,需要升级到Geoscene Server环 ...

  6. BFS(一)单词接龙

    对应 LeetCode 127 单词接龙 问题定义 给定一个字典序列 wordList,一个初始的单词 beginWord 和一个目标单词 endWord,现在要求每次变换满足以下条件将 beginW ...

  7. IPv6规模部署和应用成必然趋势,IPv6监测具有很大市场潜力

    日前,中央网信办.国家发展改革委.工业和信息化部联合印发<深入推进IPv6规模部署和应用2021年工作安排>.这更深入的表明,IPv6规模部署和应用是互联网演进升级的必然趋势,是网络技术创 ...

  8. CSS 基础 1 - Block & Inline

    CSS 基础 1 - Block & Inline display: inline/block/inline-block/none/flex/grid; block block 元素独占一行, ...

  9. MySQL进阶篇:详解存储引擎InnoDB

    本篇基础环境是使用navicat 12和Mysql8.0 MySQL进阶篇:第一章_一.二_存储引擎特点_InnoDB 1.1 存储引擎特点 1.1.1 InnoDB 1). 介绍 InnoDB是一种 ...

  10. 云原生微服务的下一站:Proxyless Service Mesh

    本文分享自华为云社区<DTSE Tech Talk | 第46期:云原生微服务的下一站:Proxyless Service Mesh>,作者:华为云社区精选. 本期直播主题是<云原生 ...