C++_STL
C++ 标准模板库(Standard Template Library,STL)是一套功能强大的 C++ 模板类和函数的集合,它提供了一系列通用的、可复用的算法和数据结构。
STL 的设计基于泛型编程,这意味着使用模板可以编写出独立于任何特定数据类型的代码。STL 分为多个组件,包括容器(Containers)、迭代器(Iterators)、算法(Algorithms)、函数对象(Function Objects)和适配器(Adapters)等。
组件名 | 描述 |
---|---|
容器(Containers) | 用于存储和管理数据的类模板,提供了不同的数据结构,如序列式容器(如 vector 、list 、deque ),可以像数组一样顺序存储元素;关联式容器(如 map 、set ),基于键值对存储元素,通过键快速查找元素;无序容器(如 unordered_map 、unordered_set ),使用哈希表实现,能在平均 O (1) 的时间复杂度内进行元素的插入、查找和删除操作。 |
迭代器(Iterators) | 为容器提供了统一的访问接口,类似于指针,用于遍历容器中的元素。不同类型的容器有不同类型的迭代器,如正向迭代器、双向迭代器和随机访问迭代器,每种迭代器提供的操作不同,如随机访问迭代器支持像指针一样进行算术运算来访问容器中的元素。 |
算法(Algorithms) | 一系列通用的函数模板,用于处理容器中的数据。这些算法独立于容器的具体实现,通过迭代器来访问和操作容器中的元素,例如 sort 算法用于对容器中的元素进行排序,find 算法用于在容器中查找特定元素。 |
函数对象(Function Objects) | 是可调用的对象,本质上是重载了函数调用运算符 () 的类。函数对象可以像函数一样被调用,与普通函数相比,它可以保存状态,例如 std::less 是一个函数对象,用于比较两个元素的大小关系。 |
适配器(Adapters) | 用于修改或扩展其他组件的接口。例如容器适配器(如 stack 、queue ),它们基于其他容器(如 deque )实现了特定的数据结构接口;迭代器适配器(如 reverse_iterator )可以将迭代器的遍历方向反转;函数适配器(如 std::bind )可以将函数或函数对象的参数绑定到特定的值,改变函数的调用方式和参数列表。 |
-
容器(Containers)
容器分类 | 容器名称 | 描述 | 特点 | 适用场合 |
---|---|---|---|---|
序列式容器 | std::vector | 动态数组,其大小可以在运行时改变。元素在内存中连续存储。 | - 支持随机访问,可通过下标快速访问任意元素。 - 尾部插入和删除操作效率高,时间复杂度为 O(1)。 - 若中间或头部插入删除元素,需移动后续元素,效率低,时间复杂度为 O(n)。 | - 适合需要频繁随机访问元素的场景,如访问数组中的第 i 个元素。 - 元素主要在尾部进行插入和删除操作的场景,如存储用户输入的整数列表。 |
std::deque | 双端队列,支持在队列两端高效地插入和删除元素。 | - 支持随机访问,但效率略低于 std::vector 。- 两端插入和删除操作效率高,时间复杂度为 O(1)。 - 内部数据存储不是连续的,由多个固定大小的数组组成。 | - 适用于需要在两端频繁插入和删除元素的场景,如任务调度系统,新任务可在队首或队尾加入。 - 对随机访问有一定要求,但不如 std::vector 频繁的场景。 | |
std::list | 双向链表,由节点组成,每个节点包含元素值以及指向前一个和后一个节点的指针。 | - 不支持随机访问,访问元素需从头或尾开始遍历,时间复杂度为 O(n)。 - 任意位置插入和删除操作效率高,时间复杂度为 O(1)。 - 动态分配节点内存,内存开销较大。 | - 适合需要频繁在任意位置插入或删除元素的场景,如实现一个链表式的缓存。 - 不需要随机访问元素的场景。 | |
std::forward_list | 单向链表,每个节点只包含指向下一个节点的指针。 | - 只支持单向顺序访问,不支持反向遍历。 - 插入和删除操作比 std::list 更高效,因为只需要更新一个指针。- 不提供 size() 操作,因为维护大小信息会增加额外开销。 | - 适用于只需要单向遍历且对空间和插入删除性能有较高要求的场景,如实现简单的链表算法。 | |
关联式容器 | std::set | 存储唯一元素的容器,元素会根据其值自动排序。 | - 元素唯一,插入重复元素会被忽略。 - 基于红黑树实现,插入、删除和查找操作的时间复杂度为 O(logn)。 - 支持双向迭代器。 | - 需要快速查找元素是否存在,且元素不能重复的场景,如存储不重复的用户名。 - 对元素进行排序存储的场景。 |
std::multiset | 允许存储多个相同值的元素,元素同样会根据其值自动排序。 | - 可存储重复元素。 - 基于红黑树实现,插入、删除和查找操作的时间复杂度为 O(logn)。 - 支持双向迭代器。 | - 存储可重复元素,并且需要快速查找的场景,如存储学生成绩排名(可能有多个学生成绩相同)。 | |
std::map | 存储键值对的容器,每个键是唯一的,元素会根据键自动排序。 | - 键唯一,一个键只能对应一个值。 - 基于红黑树实现,插入、删除和查找操作的时间复杂度为 O(logn)。 - 支持双向迭代器。 | - 根据键快速查找对应值的场景,如实现字典,通过单词查找其释义。 | |
std::multimap | 允许一个键对应多个值的容器,元素会根据键自动排序。 | - 一个键可以对应多个值。 - 基于红黑树实现,插入、删除和查找操作的时间复杂度为 O(logn)。 - 支持双向迭代器。 | - 一个键对应多个值的场景,如存储一个课程对应的多个学生信息。 | |
容器适配器 | std::stack | 基于其他容器(默认 std::deque )实现后进先出(LIFO)的数据结构。 | - 只提供 push (入栈)、pop (出栈)、top (访问栈顶元素)等操作。- 封装底层容器,限制操作接口。 | - 递归算法的非递归实现,如模拟函数调用栈。 - 表达式求值,如逆波兰表达式计算。 |
std::queue | 基于其他容器(默认 std::deque )实现先进先出(FIFO)的数据结构。 | - 提供 push (入队)、pop (出队)、front (访问队首元素)、back (访问队尾元素)等操作。- 封装底层容器,限制操作接口。 | - 任务排队处理,如消息队列,先到的消息先处理。 - 广度优先搜索(BFS)算法。 | |
std::priority_queue | 基于其他容器(默认 std::vector )实现的优先队列,元素按照优先级出队。 | - 元素根据优先级排序,默认最大元素优先级最高,可自定义比较函数。 - 提供 push (插入元素)、pop (移除优先级最高的元素)、top (访问优先级最高的元素)等操作。 | - 优先处理重要任务的场景,如操作系统任务调度,高优先级任务先执行。 - Dijkstra 最短路径算法。 |
-
迭代器(Iterators)
迭代器名称 | 描述 | 特点 | 适用场合 |
---|---|---|---|
输入迭代器(Input Iterator) | 用于从序列中读取元素,支持 ++ 操作向前移动,可进行比较和解引用操作访问元素,但只能进行单向、单次遍历,不保证对同一位置的多次访问一致性。 | 单向、单次读取,不支持元素修改,操作相对简单。 | 适用于只需对序列进行一次只读遍历的场景,如 std::find 、std::count 等算法,用于查找或统计元素。 |
输出迭代器(Output Iterator) | 用于向序列中写入元素,支持 ++ 操作向前移动,解引用后可对元素进行赋值操作,同样是单向、单次使用。 | 单向、单次写入,不支持元素读取,仅用于输出数据。 | 常用于将数据输出到某个序列的场景,例如 std::copy 算法将元素复制到目标序列时的输出端。 |
正向迭代器(Forward Iterator) | 具备输入迭代器的所有功能,并且可以多次读取同一个元素,保证在遍历过程中对元素的多次访问是安全的,支持多次单向遍历。 | 单向、可重复读取,支持简单的读写操作。 | 适用于需要对序列进行多次遍历,且每次遍历都从序列开头开始的情况,比如某些统计操作,可能需要多次遍历容器来计算不同的统计量。 |
双向迭代器(Bidirectional Iterator) | 在正向迭代器的基础上,增加了向后移动的功能,支持 -- 操作来移动到前一个元素。 | 双向移动,可重复读写,功能更强大。 | 当需要在序列中双向遍历的场景,例如双向链表中,既可以向前查找元素,也可能需要向后回溯查找其他元素。 |
随机访问迭代器(Random Access Iterator) | 支持随机访问元素,可以像指针一样进行偏移操作,如 it + n 、it - n ,还支持比较两个迭代器之间的距离、[] 操作符访问元素等。 | 随机访问,操作灵活,效率高。 | 适用于需要快速随机访问元素的容器,如 std::vector 和 std::deque 。在排序、二分查找等需要频繁随机访问元素的算法中,随机访问迭代器能提供高效的支持。 |
反向迭代器(Reverse Iterator) | 是一种特殊的迭代器适配器,它以相反的顺序遍历序列,从序列的末尾开始,向前移动到序列的开头。通过 base() 成员函数可获取对应的正向迭代器。 | 反向遍历,与正向迭代器相互转换。 | 当需要反向遍历容器时使用,比如从后往前输出容器中的元素,或者在一些需要从后往前处理数据的算法中使用。 |
-
算法(Algorithms)
算法分类 | 算法名称 | 描述 | 特点 | 适用场合 |
---|---|---|---|---|
非修改序列算法 | std::for_each | 对指定范围内的每个元素应用给定的函数 | 不修改元素值,顺序遍历元素 | 对容器元素进行统一处理,如打印元素、更新元素非值属性 |
std::find | 在指定范围内查找等于给定值的第一个元素 | 线性查找,返回迭代器 | 确定容器中是否存在某个特定值 | |
std::find_if | 在指定范围内查找满足给定条件的第一个元素 | 线性查找,可自定义条件 | 查找符合特定条件的元素,如第一个负数 | |
std::count | 统计指定范围内等于给定值的元素个数 | 线性遍历计数 | 统计容器中特定值出现的次数 | |
std::count_if | 统计指定范围内满足给定条件的元素个数 | 线性遍历计数,可自定义条件 | 统计符合特定条件的元素数量,如偶数个数 | |
修改序列算法 | std::copy | 将一个范围的元素复制到另一个范围 | 按顺序复制元素 | 复制容器元素到另一个容器 |
std::move | 将一个范围的元素移动到另一个范围 | 资源转移,避免不必要复制 | 高效转移资源,如移动对象所有权 | |
std::swap | 交换两个元素的值 | 简单交换操作 | 排序等算法中交换元素位置 | |
std::fill | 用给定值填充指定范围的元素 | 统一赋值 | 初始化容器元素为特定值 | |
std::transform | 对范围内的元素应用函数,结果存于另一个范围 | 可自定义转换操作 | 批量转换容器元素,如元素值加倍 | |
排序和相关算法 | std::sort | 对指定范围的元素进行排序 | 通常是快速排序,不稳定排序 | 对容器元素进行升序或自定义排序 |
std::stable_sort | 对指定范围的元素进行稳定排序 | 保持相等元素相对顺序,效率略低 | 排序时需保持相等元素顺序的场景 | |
std::partial_sort | 对指定范围的部分元素进行排序 | 只排前 n 个元素 | 找出前 n 个最小或最大元素 | |
std::nth_element | 重新排列范围,使第 n 个元素处于排序位置 | 不保证其他元素有序 | 找到第 n 小(大)的元素 | |
std::binary_search | 在有序范围内查找是否存在给定值 | 二分查找,效率高 | 在已排序容器中快速查找元素 | |
集合算法 | std::set_union | 计算两个有序范围的并集 | 结果也是有序的 | 合并两个集合,去除重复元素 |
std::set_intersection | 计算两个有序范围的交集 | 结果有序 | 找出两个集合的共同元素 | |
std::set_difference | 计算两个有序范围的差集 | 结果有序 | 找出在一个集合但不在另一个集合的元素 | |
std::set_symmetric_difference | 计算两个有序范围的对称差集 | 结果有序 | 找出只在一个集合中出现的元素 | |
数值算法 | std::accumulate | 计算指定范围内元素的总和 | 可指定初始值 | 计算容器元素总和 |
std::inner_product | 计算两个范围的内积 | 可指定初始值 | 数学计算中的向量内积等 | |
std::partial_sum | 计算指定范围内元素的部分和 | 结果存于另一个范围 | 生成前缀和数组 | |
std::adjacent_difference | 计算指定范围内相邻元素的差值 | 结果存于另一个范围 | 分析数据变化趋势 | |
堆算法 | std::make_heap | 将指定范围的元素转换为堆 | 满足堆的性质 | 初始化堆结构 |
std::push_heap | 将一个元素插入到堆中 | 维护堆的性质 | 动态添加元素到堆中 | |
std::pop_heap | 从堆中移除最大(小)元素 | 维护堆的性质 | 动态移除堆顶元素 | |
std::sort_heap | 将堆转换为有序序列 | 堆排序 | 对堆中的元素进行排序 | |
排列算法 | std::next_permutation | 生成指定范围元素的下一个排列 | 按字典序生成 | 生成全排列,用于搜索所有组合 |
std::prev_permutation | 生成指定范围元素的上一个排列 | 按字典序逆序生成 | 逆序生成排列 |
-
函数对象(Function Objects)
函数对象名称 | 描述 | 特点 | 适用场合 |
---|---|---|---|
std::plus<T> | 执行两个对象的加法操作,返回它们的和,即 x + y | 简单直接,可用于各种支持加法运算的数据类型,运算逻辑固定为加法 | 数值求和,如计算容器内所有元素的总和;在一些需要对元素进行累加操作的算法中使用 |
std::minus<T> | 对两个对象执行减法操作,得到差值 x - y | 功能单一,专注于减法运算,适用于支持减法的数据类型 | 计算差值,像计算两个时间点的间隔、容器中相邻元素的差值等 |
std::multiplies<T> | 实现两个对象的乘法运算,结果为 x * y | 适用于可进行乘法运算的类型,逻辑清晰为乘法 | 计算乘积,例如计算数组元素的累积乘积;在某些数学计算场景中使用 |
std::divides<T> | 对两个对象做除法运算,返回 x / y | 进行除法操作,要求除数不为零,适用于支持除法的数据类型 | 在需要进行除法计算的场景中使用,如计算平均值时的分母操作 |
std::modulus<T> | 返回两个对象相除后的余数,即 x % y | 执行取模运算,要求操作数为整数类型 | 用于需要取模的场景,如判断奇偶性、哈希函数中的取模操作 |
std::negate<T> | 对单个对象取负,得到 -x | 操作单个对象,将其变为相反数,适用于支持取负运算的类型 | 对数据进行取负处理,如在数学计算中改变数值的符号 |
std::equal_to<T> | 判断两个对象是否相等,返回 x == y 的结果 | 用于相等性判断,比较逻辑基于 == 运算符 | 在查找、筛选操作中,判断元素是否等于某个特定值 |
std::not_equal_to<T> | 判断两个对象是否不相等,返回 x != y 的结果 | 与 equal_to 相反,基于 != 运算符进行比较 | 用于查找不满足相等条件的元素 |
std::greater<T> | 比较两个对象,若 x > y 则返回 true | 基于 > 运算符,用于降序排序或比较大小 | 在排序算法中指定降序排序规则;在优先级队列中设置高优先级元素在前的规则 |
std::less<T> | 比较两个对象,当 x < y 时返回 true | 基于 < 运算符,常用于升序排序和比较 | 默认的排序准则,大多数排序算法默认使用该函数对象进行升序排列 |
std::greater_equal<T> | 判断 x >= y 是否成立,返回相应布尔值 | 基于 >= 运算符进行比较 | 在需要判断一个元素是否大于等于另一个元素的场景中使用 |
std::less_equal<T> | 判断 x <= y 是否成立,返回相应布尔值 | 基于 <= 运算符进行比较 | 用于判断元素小于等于关系的场景,如范围检查 |
std::logical_and<T> | 对两个布尔值执行逻辑与操作,返回 x && y 的结果 | 用于逻辑与运算,操作布尔类型对象 | 在需要同时满足多个条件的筛选操作中使用 |
std::logical_or<T> | 对两个布尔值执行逻辑与操作,返回 x && y 的结果 | 用于逻辑或运算,操作布尔类型对象 | 在满足多个条件中任意一个即可的筛选场景中使用 |
std::logical_not<T> | 对单个布尔值取反,返回 !x 的结果 | 对单个布尔值进行取反操作 | 在需要反转条件判断结果的场景中使用 |
-
适配器(Adapters)
适配器类型 | 适配器名称 | 描述 | 特点 | 适用场合 |
---|---|---|---|---|
容器适配器 | std::stack | 基于其他容器(默认std::deque )实现后进先出(LIFO)的数据结构,提供push (入栈)、pop (出栈)、top (访问栈顶元素)等操作 | 封装底层容器,限制操作接口,只能在栈顶进行元素的插入和删除 | 函数调用栈模拟、表达式求值(如逆波兰表达式计算)、回溯算法等 |
std::queue | 基于其他容器(默认std::deque )实现先进先出(FIFO)的数据结构,提供push (入队)、pop (出队)、front (访问队首元素)、back (访问队尾元素)等操作 | 封装底层容器,限制操作接口,元素从队尾插入,从队首删除 | 任务调度系统(如作业队列)、消息传递系统、广度优先搜索(BFS)算法 | |
std::priority_queue | 基于其他容器(默认std::vector )实现的优先队列,元素按照优先级出队,提供push (插入元素)、pop (移除优先级最高的元素)、top (访问优先级最高的元素)等操作 | 元素根据优先级排序,默认最大元素优先级最高,可自定义比较函数 | 操作系统中的任务调度(优先处理重要任务)、Dijkstra 最短路径算法等 | |
迭代器适配器 | std::reverse_iterator | 反转迭代器的遍历方向,将正向迭代器转换为反向迭代器,通过base() 成员函数可获取对应的正向迭代器 | 提供反向遍历容器的能力,不改变容器本身的存储顺序 | 需要从容器末尾向开头遍历元素的场景,如逆序输出容器元素 |
std::back_insert_iterator | 用于在容器尾部插入元素的迭代器,通过重载operator= 实现元素插入 | 可自动扩展容器容量,保证元素插入到容器尾部 | 当需要将元素插入到可增长容器(如std::vector )的末尾时使用 | |
std::front_insert_iterator | 用于在容器头部插入元素的迭代器,通过重载operator= 实现元素插入 | 对于支持头部插入的容器(如std::list 、std::deque )有效 | 在需要频繁在容器头部插入元素的场景中使用 | |
std::insert_iterator | 可在容器指定位置插入元素的迭代器,通过重载operator= 实现元素插入 | 可在任意位置插入元素,需要提供插入位置的迭代器 | 在容器的特定位置插入元素的场景 | |
函数对象适配器 | std::bind | 用于将可调用对象(函数、函数指针、成员函数指针等)与参数进行绑定,生成一个新的可调用对象,可以绑定部分参数或全部参数,还能调整参数顺序 | 提高代码的灵活性和复用性,可延迟调用可调用对象 | 当需要将一个函数适配到另一个需要不同参数列表的函数接口时使用,或者需要固定部分参数值进行多次调用 |
std::function | 通用的多态函数包装器,可存储、复制和调用任何可调用对象,包括函数、函数指针、成员函数指针、函数对象等 | 类型擦除,统一不同类型的可调用对象的调用方式 | 在需要将不同类型的可调用对象作为参数传递或存储在容器中的场景 | |
std::mem_fn | 用于包装成员函数,使其可以像普通函数一样被调用,可以直接调用成员函数,而无需显式提供对象指针或引用 | 简化成员函数的调用,提高代码可读性 | 在算法中需要调用对象的成员函数时使用,避免手动处理对象指针或引用 |
相关文章:
C++_STL
C 标准模板库(Standard Template Library,STL)是一套功能强大的 C 模板类和函数的集合,它提供了一系列通用的、可复用的算法和数据结构。 STL 的设计基于泛型编程,这意味着使用模板可以编写出独立于任何特定数据类型的…...
[FPGA Video] AXI4-Stream Remapper
Xilinx AXI4-Stream Remapper IP (PG379) 详细介绍 概述 Xilinx LogiCORE™ IP AXI4-Stream Remapper 核是一个专为视频处理设计的模块,用于在不同每时钟像素数(Pixels Per Clock, PPC)要求之间重新映射视频像素。它支持将输入 AXI4-Stream…...
【数据结构】励志大厂版·初阶(复习+刷题):栈与队列
前引:本篇将由小编与大家一起复习 栈 、队列 的知识点,栈、队列的顺序、链式结构各个缺点好处,如何实现、对于一般的增删查找此篇文章一定再详细不过!对代码的注释、何时需要判断、特殊情况,白话文版一解到底ÿ…...
pytest——参数化
之前有说过,通过pytest测试框架标记参数化功能可以实现数据驱动测试。数据驱动测试使用的文件主要有以下类型: txt 文件 csv 文件excel 文件json 文件yaml 文件.... 本文主要讲的就是以上几种文件类型的读取和使用 一.txt 文件读取使用 首先创建一个 …...
第7篇:RESTful API设计与安全防护
在前后端分离架构中,RESTful API是系统交互的核心通道。本文将从接口规范设计到安全防护,全面讲解如何在EggJS中构建安全、规范、易用的API系统,并提供完整的解决方案和最佳实践。 一、标准化API接口规范设计 1. RESTful设计原则 核心要素&…...
CSS 架构与命名规范
CSS 架构与命名规范:BEM、SMACSS 与 OOCSS 实战 引言 在前端开发中,随着项目规模的扩大,CSS 代码往往会变得难以维护和扩展。无组织的样式表会导致命名冲突、权重覆盖问题和样式继承混乱,这些问题在团队协作的大型项目中尤为明显…...
实验二 软件白盒测试
实验二 软件白盒测试 某工资计算程序功能如下:若雇员月工作小时超过40小时,则超过部分按原小时工资的1.5倍的加班工资来计算。若雇员月工作小时超过50小时,则超过50的部分按原小时工资的3倍的加班工资来计算,而40到50小时的工资仍…...
【数据结构】String字符串的存储
目录 一、存储结构 1.字符串常量池 2.字符串哈希表 2.1结构 2.2基础存储单位 2.2.1键对象 2.2.2值对象 二、存储过程 1.搜索 2.创建 三、存储位置 四、存储操作 1.new新建 2.intern入池 这是String类的详解:String类变量 一、存储结构 1.字符串常量池…...
LLMs Tokenizer Byte-Pair Encoding(BPE)
1 Byte-Pair Encoding(BPE) 如何构建词典? 准备足够的训练语料;以及期望的词表大小;将单词拆分为字符粒度(字粒度),并在末尾添加后缀“”,统计单词频率合并方式:统计每一个连续/相邻字节对的出现频率,将最高频的连续字…...
npm,yarn,pnpm,cnpm,nvm,npx包管理器常用命令
前端比较主流的包管理器主要有三个npm,yarn,pnpm 多层级依赖,通常发生在依赖之间存在复杂的版本要求时 包 A 依赖于包 B1.0.0 包 B 依赖于包 C2.0.0 另一个包 D 也依赖于 C3.0.0 一、NPM (Node Package Manager) https://www.npmjs.cn/…...
使用mybatis实例类和MySQL表的字段不一致怎么办
在 MyBatis 中,当 Java 实体类的属性名与数据库表的字段名不一致时,会导致查询结果无法正确映射。以下是几种常见解决方案及代码示例: 1. 使用 resultMap 显式映射(推荐) 场景:字段名与属性名差异较大&…...
阿里发布新一代通义千问 Qwen3模型
近日,阿里巴巴发布了新一代通义千问 Qwen3 模型,一举登顶全球最强开源模型。 这是国内首个“混合推理模型”,将“快思考”与“慢思考”集成进同一个模型,大大节省算力消耗。 旗舰模型 Qwen3-235B-A22B 在代码、数学、通用能力等…...
React pros比较机制
将 count1作为prop传递给Memoson组件 引用类型情况 虽然list值没有发生变化,但是仍旧重新渲染 解决方法使用useMemo()函数,传递一个空依赖项 // 传递数据为引用类型 比较的是引用 // 使用useMemo函数改写、const list useMemo(()>{return [1,2,3]},[…...
Flowable7.x学习笔记(十七)审批我的待办
前言 前文完成了我的待办的查询功能,本文就在此基础上从源码解读到完成审批任务的功能,审批界面我就先不带表单,直接单纯审批通过,这里需要注意的事,审批的表单其实每个节点都可能需要不同的表单内容,后续要…...
HTTP 状态码详解:用途与含义
HTTP 状态码详解:用途与含义 HTTP 状态码详解:用途与含义1. (2xx)成功类200 OK201 Created204 No Content206 Partial Content 2. (3xx)重定向类301 Moved Permanently302 Found(临时重定向&…...
AI日报 · 2025年05月02日 | 再见GPT-4!OpenAI CEO 确认 GPT-4 已从 ChatGPT 界面正式移除
1、OpenAI CEO 确认 GPT-4 已从 ChatGPT 界面正式移除 在处理 GPT-4o 更新问题的同时,OpenAI CEO Sam Altman 于 5 月 1 日在 X 平台发文,正式确认初代 GPT-4 模型已从 ChatGPT 主用户界面中移除。此举遵循了 OpenAI 此前公布的计划,即在 4 …...
ppt设计美化公司_杰青_长江学者_优青_青年长江学者_万人计划青年拔尖人才答辩ppt模板
WordinPPT / 持续为双一流高校、科研院所、企业等提供PPT制作系统服务。 / 近期PPT美化案例 - 院士增选、科学技术奖、杰青、长江学者特聘教授、校企联聘长江、重点研发、优青、青长、青拔.. 杰青(杰出青年科学基金) 支持已取得突出成果的45岁以下学…...
文章四《深度学习核心概念与框架入门》
文章4:深度学习核心概念与框架入门——从大脑神经元到手写数字识别的奇幻之旅 引言:给大脑装个"GPU加速器"? 想象一下,你的大脑如果能像智能手机的GPU一样快速处理信息会怎样?这正是深度学习的终极目标&…...
HTML5+JavaScript实现连连看游戏之二
HTML5JavaScript实现连连看游戏之二 以前一篇,见 https://blog.csdn.net/cnds123/article/details/144220548 连连看游戏连接规则: 只能连接相同图案(或图标、字符)的方块。 连线路径必须是由直线段组成的,最多可以有…...
2025年- H19-Lc127-48.旋转矩阵(矩阵)---java版
1.题目描述 2.思路 画出矩阵,新的旋转矩阵的列坐标等于原始矩阵的矩阵长度-i-1(也就是减去当前遍历的i),前后对调。然后新的旋转矩阵的横坐标,是原始矩阵的列坐标。 3.代码实现 public class H48 {public void rota…...
深入理解 MyBatis 代理机制
在 Java 开发领域,MyBatis 是一款优秀的持久层框架,它极大地简化了数据库操作,提高了开发效率。其中,代理机制作为 MyBatis 的核心特性之一,在连接 Java 代码与数据库操作中发挥着关键作用。本文将深入探讨 MyBatis 代…...
游戏引擎学习第254天:重新启用性能分析
运行游戏并尝试让性能分析系统恢复部分功能 我们现在的调试系统这几天基本整理得差不多了,因此我们打算开始清理一些功能,比如目前虽然已经在收集性能分析数据,但我们没有办法查看或有效利用这些信息。今天的计划可能会围绕这方面展开&#…...
性能测试工具篇
文章目录 目录1. JMeter介绍1.1 安装JMeter1.2 打开JMeter1.3 JMeter基础配置1.4 JMeter基本使用流程1.5 JMeter元件作用域和执行顺序 2. 重点组件2.1 线程组2.2 HTTP取样器2.3 查看结果树2.4 HTTP请求默认值2.5 JSON提取器2.6 用户定义的变量2.7 JSON断言2.8 同步定时器&#…...
【Hive入门】Hive性能调优之Join优化:深入解析MapJoin与Sort-Merge Join策略
目录 前言 1 Hive Join操作基础 1.1 Join操作的类型与挑战 1.2 Hive Join执行机制 2 MapJoin优化策略 2.1 MapJoin原理 2.2 MapJoin适用场景 2.3 MapJoin关键参数 3 Sort-Merge Join优化策略 3.1 Sort-Merge Join原理 3.2 Sort-Merge Join优势 3.3 关键配置参数 3…...
【Unity】使用XLua实现C#访问Lua文件
先引入XLua文件中的Plugins和XLua文件夹于Unity项目的Asset文件中 XLua_github链接 建立Lua虚拟机:LuaEnv luaEnv new LuaEnv(); 关闭虚拟机,及时释放资源:luaEnv.Dispose(); Resources文件夹下加载lua文件(假设文件路径为Resour…...
AXI中的out of order和interleaving的定义和两者的差别?
AXI中的out of order和interleaving的定义和两者的差别 摘要:在 AXI (Advanced eXtensible Interface) 协议中,Out-of-Order 和 Interleaving 是两个与事务处理顺序和数据传输相关的概念,它们都与 AXI 协议支持的多事务并发处理能力有关&…...
生产级RAG系统一些经验总结
本文将探讨如何使用最新技术构建生产级检索增强生成(RAG)系统,包括健壮的架构、向量数据库(Faiss、Pinecone、Weaviate)、框架(LangChain、LlamaIndex)、混合搜索、重排序器、流式数据接入、评估策略以及实际部署技巧。 引言:检索增强生成的力量 大型语…...
sftp连接报错Received message too long 168449893
sftp连接报错Received message too long 168449893 一、openEuler传文件报错二、分析问题三、解决问题endl 一、openEuler传文件报错 [rootRocky9-12 ~]# scp apache-tomcat-10.1.33.tar.gz root10.0.0.14:Authorized users only. All activities may be monitored and report…...
Java中修饰类的关键字
Java中修饰类的关键字 在web编程课上,老师提问了Java中各种修饰类的关键字的用途和区别,一时间我头脑空白,现在课后重新梳理一遍Java中修饰类的各种关键字的区别和用法。在Java编程中,修饰类的关键字起着至关重要的作用ÿ…...
2025年人工智能火爆技术总结
2025年人工智能火爆技术总结: 生成式人工智能 生成式人工智能可生成高质量的图像、视频、音频和文本等多种内容。如昆仑万维的SkyReels-V2能生成无限时长电影,其基于扩散强迫框架,结合多模态大语言模型和强化学习等技术,在运动动…...
脑机接口技术:开启人类与机器的全新交互时代
在科技飞速发展的今天,人类与机器的交互方式正经历着前所未有的变革。从最初的键盘鼠标,到触摸屏,再到语音控制,每一次交互方式的升级都极大地提升了用户体验和效率。如今,脑机接口(Brain-Computer Interfa…...
Arduino程序函数详解与实际案例
一、Arduino程序的核心架构与函数解析 Arduino程序的核心由两个函数构成:setup() 和 loop()。这两个函数是所有Arduino代码的骨架,它们的合理使用决定了程序的结构和功能。 1.1 setup() 函数:初始化阶段 setup() 函数在程序启动时仅执行一次,用于完成初始化配置,例如设置…...
2025年RAG技术发展现状分析
2025年,大模型RAG(检索增强生成)技术经历了快速迭代与深度应用,逐渐从技术探索走向行业落地,同时也面临安全性和实用性的新挑战。以下是其发展现状的综合分析: 一、技术架构的持续演进 从单一到模块化架构 …...
C++11新特性_范围-based for 循环
based for 循环介绍 范围 - based for 循环(Range-based for loop)是 C11 引入的一种新的 for 循环语法,它可以更简洁地遍历容器和数组。 遍历数组:定义了一个整数数组 arr,使用范围 - based for 循环 for (int num :…...
小牛电动:荣登央视舞台,引领智能出行新潮流
在这个科技飞速发展的时代,出行方式也在不断地变革与创新。而在两轮电动车领域,有一个品牌凭借其卓越的技术、独特的设计和优质的服务脱颖而出,那就是小牛电动。近日,小牛电动荣登央视舞台,成为备受瞩目的焦点…...
Three.js在vue中的使用(一)-基础
Three.js 是一个基于 WebGL 的 JavaScript 3D 图形库,它简化了在网页中创建和渲染 3D 场景的复杂性。Three.js 提供了丰富的功能,如光照、材质、几何体、动画、控制器等,使得开发者可以快速构建交互式的 3D 应用。 🧠 Three.js 原理概述 1. WebGL 基础 Three.js 底层使用…...
开发板型号 ESP32-DevKitC-32模块型号 ESP32-WROOM-32 和主控芯片 ESP32-D0WDQ6-V3
以下是关于开发板型号 ESP32-DevKitC-32、模块型号 ESP32-WROOM-32 和主控芯片 ESP32-D0WDQ6-V3 的详细介绍: 开发板型号:ESP32-DevKitC-32 概述:ESP32-DevKitC 是乐鑫推出的一款基于 ESP32 模组的小型开发板,板上模组的绝大部…...
【C语言练习】015. 声明和初始化指针
015. 声明和初始化指针 015. 声明和初始化指针1. 声明指针示例1:声明一个指向整数的指针2. 初始化指针示例2:将指针初始化为`NULL`示例3:将指针初始化为某个变量的地址示例4:将指针初始化为动态分配的内存地址3. 使用指针访问和修改变量的值示例5:使用指针访问和修改变量的…...
手撕哈希表
引入:unordered_set /map是什么? 库里面除开set和map,还有unordered_set 和 unordered_map,区别在于: ①:set和map的底层结构是红黑树,而unordered_set和unordered_map的底层是哈希表 ②&…...
编程题python常用技巧-持续
1.字典 1.1排序 在Python中,要按照字典的值进行排序,可以按照以下步骤操作: 方法说明 获取键值对列表:使用 dict.items() 获取字典的键值对视图。排序键值对:使用 sorted() 函数,并通过 key 参…...
大模型蒸馏技术
提问:请写一篇关于蒸馏大模型的详细解说(论文),要求配有图并不少于8000字。 Deepseek: 大模型蒸馏技术:原理、方法与产业实践 ——基于知识压缩与效率优化的深度解析 目录 引言:大模型时代的…...
深入理解C语言中的整形提升与算术转换
深入理解C语言中的整形提升与算术转换 一.整形提升:概念与原理 在C语言中,整形提升(Integer Promotion)是一个重要但容易被忽视的概念。它指的是在表达式中,任何小于int类型的整型(如char、short…...
企业经营系统分类及功能详解
近年来互联网行业下行,招聘少,要求离谱,年龄学历背景已经卡的死死的,技术再突出也没用。 但对于软件开发来说,互联网只是一小部分,企业级系统软件开发,虽然不如互联网大起大落,但重…...
IRF2.0IRF3.1
1、IRF3定义 IRF3是一种能够提高网络接入层的接入能力和管理效率的纵向网络整合虚拟化技术,采用IEEE 802.1BR标准协议实现。IRF3将多台PEX设备(Bridge Port Extender)连接到父设备(Parent device)上,将每台…...
【C++】类和对象【中下】
目录 一、类与对象1、运算符重载1.2 赋值运算符重载1.3 <<运算符和>>运算符1.4 前置与后置 2、 const成员函数3、取地址运算符重载 个人主页<—请点击 C专栏<—请点击 一、类与对象 本期的主题是一步步完善日期类的编写,将要讲解的知识融入在代…...
ThreadLocal详解
什么是 ThreadLocal? ThreadLocal 是 Java 中的一个工具类,用于为每个线程提供独立的变量副本,使得每个线程可以独立操作自己的变量,避免多线程环境下的数据竞争问题。它的核心思想是线程封闭(Thread Confi…...
Vue3 + OpenLayers 企业级应用进阶
1. 企业级架构设计 1.1 微前端架构集成 // src/micro-frontend/map-container.ts import { Map } from ol; import { registerMicroApps, start } from qiankun;export class MapMicroFrontend {private map: Map;private apps: any[];constructor(map: Map) {this.map map;…...
如何提升自我执行力?
提升个人执行力是一个系统性工程,需要从目标管理、习惯养成、心理调节等多方面入手。 以下是具体方法,结合心理学和行为科学原理,帮助你有效提升执行力: 一、明确目标:解决「方向模糊」问题 1. 用SMART原则设定目标 …...
L3-041 影响力
下面给出基于“切比雪夫距离”(Chebyshev 距离)之和的高效 O(nm) 解法。核心思想是把 ∑ u 1 n ∑ v 1 m max ( ∣ u − i ∣ , ∣ v − j ∣ ) \sum_{u1}^n\sum_{v1}^m\max\bigl(|u-i|,|v-j|\bigr) u1∑nv1∑mmax(∣u−i∣,∣v−j∣) 拆成两个…...
【ESP32】st7735s + LVGL使用-------图片显示
【ESP32】st7735s + LVGL使用-------图片显示 1、文件准备2、工程搭建3、代码编写4、应用部分5、函数调用6、显示效果移植部分参考这个博客: 【ESP32】st7735s + LVGL移植 1、文件准备 本次图片放在内部存储,先使用转换工具将要显示的图片转换好。 文件名保存为xx.c,xx这…...