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

C++11QT复习 (十四)

文章目录

    • Day9 数据结构学习笔记(2025.04.01)
      • 一、C++基础快速回顾
      • 二、STL(标准模板库)
      • 三、常见容器及其对应的数据结构
      • 四、容器操作演示
        • 1. 基本容器使用
        • 2. 异构类型容器
      • 五、迭代器详解
        • 特点
        • 示例
        • 用户自定义结构体访问成员
      • 六、算法库与排序演示
        • STL算法特点
        • 示例:排序
        • C++20 ranges(了解)
      • 七、完整测试代码
      • 八、总结

Day9 数据结构学习笔记(2025.04.01)

一、C++基础快速回顾

  • 内存模型
    • 栈(stack)与堆(heap)分配
    • 指针与引用(左值引用、右值引用、const 引用)
  • 类型系统
    • 内置类型与自定义类型
    • 构造与析构(RAII)
    • 拷贝与赋值(深拷贝/浅拷贝,共享/独占语义)
    • 移动语义(C++11)
    • 操作符重载
    • 继承与多态(虚函数、RTTI)
  • 模板
    • 泛型编程基础
    • 模板函数与模板类

二、STL(标准模板库)

STL由以下五个核心部分组成:

  1. 容器(Containers)
    • 存储和管理数据结构(如数组、链表、哈希表、树等)
    • 常见限制:不能使用引用类型或函数作为元素
  2. 迭代器(Iterators)
    • 提供统一方式访问容器元素
    • 本质行为类似指针(重载 *, ->, ++, -- 等)
  3. 算法(Algorithms)
    • 提供常见操作如排序、查找、复制、删除等
    • 与容器无关,仅依赖迭代器
  4. 函数对象与适配器
    • std::less,可定制算法行为
  5. 工具类与API封装
    • 如智能指针、时间、线程、文件系统等

三、常见容器及其对应的数据结构

容器数据结构特点
std::array固定大小数组编译期大小,栈分配
std::vector动态数组支持随机访问,自动扩容
std::forward_list单向链表内存使用少,不能反向遍历
std::list双向链表可双向遍历,插入删除效率高
std::set/map红黑树(有序)元素有序,插入删除O(logn)
std::unordered_set/map哈希表(无序)查询效率高,O(1)平均复杂度
std::stack栈(适配器)LIFO,默认基于deque实现
std::queue队列(适配器)FIFO,默认基于deque实现
std::priority_queue堆(适配器)默认大顶堆
std::deque双端队列头尾高效插入删除
std::tuple / std::pair异构数据结构用于存储不同类型的多个值

四、容器操作演示

1. 基本容器使用
std::array<int, 10> arr = {};      // 固定数组
std::vector<int> vec;              // 动态数组
std::forward_list<int> flist;      // 单向链表
std::list<int> dlist;              // 双向链表
std::set<int> s;                   // 红黑树(有序)
std::unordered_set<int> uset;      // 哈希集合(无序)
std::map<int, std::string> m;      // 红黑树(键值对)
std::unordered_map<int, std::string> umap; // 哈希键值对
std::stack<int> st;                // 栈(基于 deque)
std::queue<int> q;                 // 队列(基于 deque)
std::deque<int> dq;                // 双端队列
2. 异构类型容器
std::tuple<int, double, float> t;
std::pair<int, std::string> p;

五、迭代器详解

特点
  • 类似指针,可使用 * 取值、-> 访问成员、++ 移动
  • begin():指向首元素;end():指向末元素之后的位置
  • 容器变化后迭代器可能失效(如 resize()
示例
std::vector<int> v = {1, 2, 3};
auto it = v.begin();
std::cout << *it; // 1
v.resize(100);    // it 失效
it = v.begin();   // 重新获取
用户自定义结构体访问成员
struct RAE { double R, A, E; };
std::vector<RAE> raes;
raes.push_back({1.0, 2.0, 3.0});
raes.begin()->R = 100.0; // 使用 operator-> 访问

六、算法库与排序演示

STL算法特点
  • 以迭代器为输入
  • 解耦容器与算法实现
  • 多数算法在 <algorithm> 中定义
示例:排序
std::array<int, 10> arr = {9, 7, 8, 2, 5, 4, 3, 1, 2, 0};
std::sort(arr.begin(), arr.end(), std::less<int>());
// 默认升序排序,std::less<int>() 可省略for (int i : arr) {std::cout << i << " ";
}
C++20 ranges(了解)
  • 新增 ranges::sort, views::filter, views::transform 等函数式风格
  • 示例:ranges::sort(arr);(需要头文件 <ranges>

七、完整测试代码

#include <iostream>
#include <vector>
#include <array>
#include <forward_list>
#include <list>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <stack>
#include <queue>
#include <deque>#include <algorithm>//std::sort
#include <functional>//std::less#include <tuple>/*
C++基础快速回顾指针引用(左值,右值,常量)栈堆内置类型自定义类型1. 构造 析构 RAII2. 拷贝 独占(深拷贝)共享(浅拷贝)3. 移动4. 操作符重载5. 继承6. 多态 RTTI模板查漏补缺
*//*
STL: standard template library
标准模板库,简称标准库
标准库包含
1. 容器,是可以放进容器的元素的集合(什么不能做容器的元素类型?引用和函数)
2. 迭代器,提供一种访问不同容器元素的统一接口,隐藏了容器组织元素的数据结构细节
3. 算法,基于迭代器实现,以统一接口操作不同容器,比如排序算法
4. 跨平台的操作系统API封装,比如文件系统,IO操作,区域化,时间,线程等
5. 通用工具和其他,比如智能指针用于帮助自动释放堆内存,同时提供独占和共享语义
*//*
容器实现了各种数据结构:
- 不变的数组,array
- 动态数组,vector
- 字符串,string / wstring,可看成 vector<char> / vector<wchar_t>
- 单向链表,forward_list
- 双向链表,list
- 二叉平衡搜索树(红黑树),set & map
- 哈希表,unordered_set & unordered_map
- 双端队列,deque
- 栈,stack,容器适配器,使用 deque 实现
- 队列,deque,容器适配器,使用 deque 实现
- 堆,最小/大堆,也称优先队列,priority_queue,容器适配器,使用 vector 实现
- 异构体,tuple常见数据结构的复杂度:
1. 数组 索引 O(1) 插入删除 O(n)
2. 链表 索引 O(n) 插入删除 O(1)
3. 红黑树(有序) 索引 O(logn) 插入删除 O(logn)
4. 哈希(无序) 索引 O(1) 插入删除 O(n)按所需的数据结构选择恰当的容器
*//*
迭代器一种设计模式,用于隐藏容器内元素的组织方式,以一种统一的接口来访问行为类似指针,重载了 operator-> ,operator++ 等注意:之前赋值的迭代器在容器发生改变后可能会失效,指向非法内存,需要重新取迭代器
*/
static void iterator_demo()
{std::vector<int> v{ 1, 2, 3 };auto iter = v.begin(); // *iter == 1 == v[0]iter++; // *iter == 2 == v[1]iter = v.end(); // 指向最后一个元素的下一个位置,禁止对其使用operator*解引用!!!iter--; // *iter == 3 == v[2]// 看看v的第一个元素的地址在哪里,那是一个堆地址std::cout << v.data() << ' ';// 或者// 由于 cout 无法打印迭代器,因为迭代器没实现operator<<// 迂回一下,对迭代器解引用再取地址,可得到普通指针int*int* p = &(*v.begin());std::cout << p << ' ';// 或者// 回想下数组名其实就是个指针,那迭代器表现得像指针,是不是也可以看成数组名?// 的确,可以使用下标作用到迭代器上(只有数组的迭代器有这个特权)// 注意[]的优先级比&高,先调用[]然后&std::cout << &v.begin()[0] << ' '; // 不放心就加括号 &(v.begin()[0])// 或者// v本身就是个数组,可以直接取下标std::cout << &v[0] << std::endl;// 把v的尺寸改为100个元素,势必引起迭代器失效// 需要在堆上重新找容纳100个int的空间,使用new分配// 然后把当前这3个int拷过去// 最后释放这3个的int的空间(形成内存碎片),不可以再访问,即不可以再操作原来的迭代器// 前3个是1,2,3,剩下全部填0v.resize(100);// 再看看第一个元素在哪,和上面已经不一样了std::cout << v.data() << std::endl;// 缩小改为3个元素,没有引发迭代器失效(出于性能考虑)// 后面97个元素的空间还给操作系统了(形成内存碎片),不可以再访问// 但是,不要管缩小会不会引起迭代器失效,只要修改了容器,就总是重新取迭代器v.resize(3);std::cout << v.data() << std::endl;struct RAE{double R;double A;double E;};std::vector<RAE> raes;raes.push_back({ 1.0, 2.0, 3.0 });// 由于重载了operator-> 迭代器可以像使用指针一样访问成员变量raes.begin()->R = 100.0;
}static std::ostream& operator<<(std::ostream& os, const std::vector<int>& v)
{// 使用迭代器遍历容器,其实编译器看到 for (int i : v) 就是转成以下代码for (auto iter = v.cbegin(); iter != v.cend(); ++iter){os << *iter << ' ';}return os;
}int main()
{//不变的数组// 修正:避免越界访问std::array<int, 10> arr1 = {};  // 初始化为全0arr1[0] = 1;                    // 合法索引 0~9arr1[9] = 1;                    // 合法// arr1[10] = 1;                // 错误:注释掉越界访问  保持和原生C语言一样的语义,不做任何检查// arr1.at(10) = 1;             // 错误:注释掉越界访问  做检查,运行时报错//动态数组std::vector<int> vector;vector.push_back(1);//单向链表std::forward_list<int> forwardList;forwardList.push_front(1);//双向链表std::list<int> list;list.push_back(1);list.push_front(1);//平衡树,(有序)单个元素std::set<int> set;//默认从小到大排序set.insert(1);//平衡树,(默认有序) 键值对 ,按照键的大小来排序std::map<int, std::string> map;map[0] = "zhangsan";map[1] = "lisi";//无序关联式容器//哈西(无序)std::unordered_set<int>  unorder_set;unorder_set.insert(1);//哈希 (无序)键值对std::unordered_map<int, std::string> unordered_map;unordered_map[0] = "abc";unordered_map[1] = "def";//栈(使用双端队列实现)std::stack<int> stack;/*入栈*/stack.push(1);/*出栈*/int top = stack.top();stack.pop();//队列std::queue<int> queue;queue.push(1);queue.front();queue.pop();//双端队列std::deque<int> deque;deque.push_back(1);deque.push_front(2);deque.pop_back();deque.pop_front();//异构 : 支持不同类型struct Tuple {int a;double b;float c;};std::tuple<int, double, float> tuple;//元组std::get<0>(tuple) = 1;//异构之std::pair,只存放两个值,是map unorder_map的存储单元//键值对std::pair<int, double> pair;//迭代器 设计模式//目的:隐藏容器中元素的组织形式,用提供统一的接口来访问//最常见的方法:eg:获取第一个元素begin ,访问下一个元素next  //迭代器是行为指针的类型auto firstElement = vector.begin();//访问vector容器中元素的几种方式int a = *firstElement;int b = vector[0];int c = vector.at(0);firstElement++;auto firstElement2 = vector.begin();firstElement2++;/*
算法在C++20之前,算法库一般接收迭代器使用 begin 获取起始迭代器,指向第一个元素end 获取末迭代器,指向最后一个元素的下一个位置函数式编程是C++20的一个重要发展方向C++20起,引入了 ranges 库,为算法提供了不同的访问方式C++23继续完善 ranges 库C++20及之后的内容,权当了解最新的发展,可以完全不管
*///算法/*由于迭代器隐藏了容器的具体数据结构,算法进而使用迭代器,从而使用统一的方式,操作不同的容器*/std::array<int, 10> arrayRandom= { 9,7 ,8 ,2 ,5 ,4 ,3 ,1 ,2 ,0};//arrayRandom.end() 是指向容器中最后一个元素的下一个位置// 排序(升序,std::less<int>() 是默认行为,可省略)std::sort(arrayRandom.begin(), arrayRandom.end(), std::less<int>());// 打印排序后的元素for (auto i : arrayRandom) {std::cout << i << " "; // 输出每个元素,用空格分隔}std::cout << std::endl; // 换行return 0;
}

八、总结

  • STL 提供统一的数据结构与算法接口,核心三件套是容器、迭代器、算法
  • 学会根据实际使用场景(性能、顺序、插入/删除频率)选择合适容器
  • 操作容器时,要注意迭代器失效问题
  • 算法库配合迭代器提供高效、可复用的操作方式

相关文章:

C++11QT复习 (十四)

文章目录 Day9 数据结构学习笔记&#xff08;2025.04.01&#xff09;一、C基础快速回顾二、STL&#xff08;标准模板库&#xff09;三、常见容器及其对应的数据结构四、容器操作演示1. 基本容器使用2. 异构类型容器 五、迭代器详解特点示例用户自定义结构体访问成员 六、算法库…...

ThreadCache

目录 一、Freelist 二、ThreadCache 三、哈希桶映射规则 一、Freelist 在之前整体框架介绍的时候&#xff0c;我们曾说过ThreadCache是一个哈希桶的结构。每一个桶都要存同一个大小的对象块&#xff08;即最小块的内存&#xff09;。 那么我们使用FreeList来…...

c++中同步和异步,阻塞和非阻塞原理以及机制

在C中&#xff0c;同步与异步、阻塞与非阻塞是并发编程中的重要概念&#xff0c;它们描述了程序在执行任务时的行为模式。理解这些概念对于设计高效、响应良好的并发程序至关重要。下面我将详细介绍这些概念的原理和机制。 1. 同步与异步 同步&#xff08;Synchronous&#x…...

Python项目打包指南:PyInstaller与SeleniumWire的兼容性挑战及解决方案

前言 前段时间做一个内网开发的需求&#xff0c;要求将selenium程序打包成.exe放在内网的win7上运行&#xff0c;在掘金搜了一圈也没有发现相关文章&#xff0c;因此将过程中踩到的坑记录分享一下。 本文涵盖了具体打包操作、不同模块和依赖项的兼容性解决方案&#xff0c;以…...

浅谈微信视频号推荐算法

这次可能会稍微有点干货&#xff0c;但保证不晦涩~ 一、算法推荐的本质&#xff1a;猜你喜欢 vs 社交绑架​ 视频号的推荐系统本质上在做两件事&#xff1a; ​预测你的兴趣​&#xff1a;通过你的浏览、点赞、评论、分享等行为&#xff0c;分析你的偏好。​满足社交需求​&…...

selenium 常用方法

selenium 库的常用方法&#xff1a; 方法说明示例代码webdriver.Chrome()初始化 Chrome 浏览器实例。driver webdriver.Chrome()driver.get(url)访问指定的 URL 地址。driver.get("https://example.com")driver.find_element(By, value)查找第一个匹配的元素。elem…...

springboot中使用async实现异步编程

目录 1.说明 2.实现原理 3.示例 4.总结 1.说明 Async 是 Spring 框架提供的一个注解&#xff0c;用于标记方法为异步执行。被标记的方法将在调用时立即返回&#xff0c;而实际的方法执行将在单独的线程中进行。 Async 注解有一个可选属性&#xff1a;指定要使用的特定线程…...

【2024年蓝桥杯Java B组】省赛真题详细解析

【2024年蓝桥杯Java B组】省赛真题 距离比赛仅剩5天&#xff0c;大多数省份可能完成3-4题即可拿到省奖&#xff0c;2025年想要拿到省奖&#xff0c;需要高效利用时间&#xff0c;重点突破关键知识点和题型。这里以【2024年蓝桥杯Java B组省赛真题】为例&#xff0c;梳理我们最后…...

SQL:DDL(数据定义语言)和DML(数据操作语言)

目录 什么是SQL&#xff1f; 1. DDL&#xff08;Data Definition Language&#xff0c;数据定义语言&#xff09; 2. DML&#xff08;Data Manipulation Language&#xff0c;数据操作语言&#xff09; DDL和DML的区别 什么是SQL&#xff1f; SQL&#xff08;Structured …...

机器学习核心概念、算法分类与应用场景全解析

文章目录 一、基础任务与算法分类1. 分类任务&#xff08;监督学习&#xff09;2. 回归任务&#xff08;监督学习&#xff09;3. 聚类任务&#xff08;无监督学习&#xff09; 二、关键流程与技术细节1. 数据预处理2. 特征工程3. 数据集划分与评估 三、进阶技术1.深度学习2.强化…...

【leetcode】—416.分割等和子集

✏️ 关于专栏&#xff1a;专栏用于记录 LeetCode 中做题与总结 文章目录 分割等和子集▐ 题目描述▐ 题目示例▐ 题目提示▐ 思路&代码方法&#xff1a;动态规划 分割等和子集 ▐ 题目描述 题目链接&#xff1a;分割等和子集 给你一个 只包含正整数 的 非空 数组 nums …...

jemeter 之mysql驱动问题

问题 java.sql.SQLException: No suitable driver found for jdbc:mysql 解决 先把jar放到lib下 检查 JMeter 的 Classpath 在 JMeter 中&#xff0c;JDBC 驱动需要手动添加到 Classpath 中。 打开 JMeter 安装目录下的 bin/jmeter.properties 文件&#xff0c;找到 user.cla…...

隐私计算的崛起:数据安全的未来守护者

在信息技术&#xff08;IT&#xff09;的滚滚浪潮中&#xff0c;一种新兴技术正以惊人速度崭露头角——隐私计算&#xff08;Privacy-Preserving Computation&#xff09;。2025 年&#xff0c;随着数据泄露事件频发、全球隐私法规日益严格&#xff0c;以及企业对数据协作需求的…...

Excel计数、求和、统计、计算类函数

目录 一、计数函数1. COUNT2. COUNTA3. COUNTBLANK4. COUNTIF5. COUNTIFS 二、求和函数1. SUM2. SUMIF3. SUMIFS4. SUMPRODUCT 三、统计函数1. AVERAGE2. AVERAGEA3. AVERAGEIF 函数4. AVERAGEIFS 函数 四、其他常用计算函数1. MAX 与 MIN2. RANK3. MOD4. ROUND5. FLOOR6. INT7…...

解决 Kubernetes 中容器 `CrashLoopBackOff` 问题的实战经验

在 Kubernetes 集群中&#xff0c;容器状态为 CrashLoopBackOff 通常意味着容器启动失败&#xff0c;并且 Kubernetes 正在不断尝试重启它。这种状态表明容器内可能存在严重错误&#xff0c;如应用异常、依赖服务不可用、配置错误等。本文将分享一次实际排障过程&#xff0c;并…...

北师大具身AI的虚拟世界扩展!UNREALZOO:为具身智能打造高逼真度的虚拟世界

作者&#xff1a;Fangwei Zhong, Kui Wu, Churan Wang, Hao Chen, Hai Ci, Zhoujun Li, Yizhou Wang 单位&#xff1a;北京师范大学&#xff0c;北京航空航天大学&#xff0c;北京大学&#xff0c;BIGAI&#xff0c;澳门城市大学&#xff0c;新加坡国立大学 论文标题&#xf…...

2025 年浙江保安员职业资格考试高效备考指南​

浙江以创新活力著称&#xff0c;保安行业也在不断革新。2025 年考试报考条件常规&#xff0c;报名主要通过浙江省保安服务监管信息系统&#xff0c;方便快捷。​ 理论考试在传统知识基础上&#xff0c;加大对智能安防技术应用的考查&#xff0c;如人脸识别系统、智能监控报警系…...

创意设计:动态彩色数学爱心

设计理念 数学之美&#xff1a;使用心形线的数学方程&#xff08;心形曲线&#xff09;生成爱心形状。视觉吸引力&#xff1a;通过 Python 的 colorama 库添加颜色渐变效果。动态感&#xff1a;加入简单的动画&#xff0c;让爱心“跳动”。技术魅力&#xff1a;结合模块化编程…...

C++动态内存管理完全指南:从基础到现代最佳实践

一、动态内存基础原理 1.1 内存分配层次结构 内存类型生命周期分配方式典型使用场景静态存储区程序整个运行期编译器分配全局变量、静态变量栈内存函数作用域自动分配/释放局部变量堆内存手动控制new/malloc分配动态数据结构 1.2 基本内存操作函数 // C风格 void* malloc(s…...

ebpf: CO-RE, BTF, and Libbpf(一)

本文内容主要来源于Learning eBPF&#xff0c;可阅读原文了解更全面的内容。 概述 一个ebpf程序可以在一个kernel版本中编译&#xff0c;而在另外一个kernel版本上运行&#xff0c;即便两个kernel版本中有些结构体有变化。而BTF(BPF Type Format) 是能让ebpf有这种强大兼容性…...

Linux 递归查找并删除目录下的文件

在 Linux 中&#xff0c;可以使用 find 命令递归查找并删除目录下的文件 1、示例命令 find /path/to/directory -type f -name "filename_pattern" -exec rm -f {} 2、参数说明 /path/to/directory&#xff1a;要查找的目标目录type f&#xff1a;表示查找文件&am…...

使用人工智能大模型腾讯元宝,如何快速编写活动记录?

今天我们学习使用人工智能大模型腾讯元宝&#xff0c;如何快速编写活动记录&#xff1f; 手把手学习视频地址https://edu.csdn.net/learn/40402/666457 第一步在腾讯元宝对话框中输入如何协助老师写教研活动记录&#xff0c;通过提问&#xff0c;我们了解了老师写教研活动记录…...

File 类的用法和 InputStream, OutputStream 的用法

1 文件系统的操作 创建文件&#xff0c;删除文件&#xff0c;创建目录&#xff0c;重命名文件&#xff0c;判定文件存在... Java中提供file类进行文件系统操作&#xff0c;使用路径进行初始化表示具体的文件&#xff08;可以存在&#xff0c;也可以不存在&#xff09;&#xf…...

buuctf--[湖南省赛2019]Findme

目录 前沿 解题过程 分析 ​p1 P2 p3 p4 p5 前沿 其实对于这道题呢&#xff0c;我的想法是不知道怎么判断的&#xff0c;这个题你说他难吧&#xff0c;他用的都是比较基础的东西&#xff0c;说他简单吧&#xff0c;他有太复杂的过程&#xff0c;总体来讲&#xff0…...

【从0到1学MybatisPlus】MybatisPlus入门

Mybatis-Plus 使用场景 大家在日常开发中应该能发现&#xff0c;单表的CRUD功能代码重复度很高&#xff0c;也没有什么难度。而这部分代码量往往比较大&#xff0c;开发起来比较费时。 因此&#xff0c;目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国…...

【S32M244 RTD200P04 LLD篇8】S32M244 PWM ADC LLD demo

【S32M244 RTD200P04 LLD篇8】S32M244 PWM ADC LLD demo 一&#xff0c;文档简介二&#xff0c;PWMTRGMUXPDBADC 2ch 软件配置与实现2.1 软硬件版本平台2.2 Demo CT 模块配置2.2.1 引脚配置2.2.2 时钟配置2.2.3 外设配置 2.3主程序调用情况 三&#xff0c; 测试结果 一&#xf…...

(蓝桥杯)动态规划蓝桥杯竞赛指南:动态规划解决最少钞票数问题(超详细解析+代码实现)

问题描述 近期&#xff0c;黄开的银行新发行了一种面额为 4 的钞票&#xff0c;使得钞票种类增至 5 种&#xff1a;20、10、5、4 和 1 元。银行在发钞时十分“节俭”&#xff0c;当有客户取钱时&#xff0c;需要以最少的钞票数来满足取款金额。 问题要求&#xff1a; 对于给定…...

深度:善用人工智能推动高等教育学习、教学与治理的深层变革

在人工智能技术与教育深度融合的当下,高等教育正经历着前所未有的范式转型。从学习方式的革新到教学模式的重构,再到治理体系的升级,人工智能已不再仅仅是辅助工具,而是成为重塑高等教育生态的核心驱动力。这一变革浪潮中,生成式人工智能(Generative AI)作为技术前沿的代…...

python全栈-JavaScript

python全栈-js 文章目录 js基础变量与常量JavaScript引入到HTML文件中JavaScript注释与常见输出方式 数据类型typeof 显示数据类型算数运算符之加法运算符运算符之算术运算符运算符之赋值运算符运算符之比较运算符运算符之布尔运算符运算符之位运算符运算符优先级类型转换 控制…...

Django信号使用完全指南示例

推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 **引言:****先决条件:****目录:****1. 什么是Django信号?****2:设置你的Django项目****2.1. 安装Django**2.2. 创建一个Django项…...

# 深入理解GPT:架构、原理与应用示例

深入理解GPT&#xff1a;架构、原理与应用示例 一、引言 GPT&#xff08;Generative Pre-trained Transformer&#xff09;系列模型自2018年问世以来&#xff0c;凭借其强大的文本生成能力和多任务适应性&#xff0c;彻底改变了自然语言处理&#xff08;NLP&#xff09;领域。…...

C语言递归

一、递归的核心原理 1. 递归的本质 自相似性&#xff1a;将问题分解为与原问题结构相同但规模更小的子问题&#xff08;如树的遍历、分治算法&#xff09;。 栈机制&#xff1a;每次递归调用都会在内存栈中创建一个新的函数栈帧&#xff0c;保存当前状态&#xff08;参数、局…...

Jetpack Compose 基础组件学习2.0

文章目录 1、kotlin版本修改问题修改2、前言&#xff1a;参考知识点&#xff1a; 3、文字超链接的实现新版实现&#xff08;Text AnnotatedString实现效果&#xff09; 4、文字强调效果&#xff08; Material3 的透明度方案&#xff09;material依赖实现文字强调效果&#xff…...

MySQL SQL 优化的10个关键方向

1. 索引优化 合理创建索引&#xff1a;为高频查询条件、JOIN字段、排序字段创建索引 复合索引设计&#xff1a;遵循最左前缀原则&#xff0c;将选择性高的列放在前面 避免索引失效&#xff1a;防止索引列上使用函数、类型转换、OR条件不当使用 覆盖索引&#xff1a;尽量让查…...

babel-runtime 如何缩小打包体积

&#x1f916; 作者简介&#xff1a;水煮白菜王&#xff0c;一位前端劝退师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 前端专栏 &#xff0c;记录一下平时在博客写作中&#xff0c;总结出的一些开发技巧和知识归纳总结✍。 感谢支持&#x1f495;&#x1f495;&#…...

VMware Fusion虚拟机Mac版安装CentOS Stream 9

VMware Fusion虚拟机Mac版安装CentOS Stream 9 文章目录 VMware Fusion虚拟机Mac版安装CentOS Stream 9一、介绍二、效果三、下载 一、介绍 CentOS Stream 9是CentOS Stream发行版的最新主要版本&#xff0c;旨在提供Red Hat Enterprise Linux&#xff08;RHEL&#xff09;的每…...

手搓多模态-05 transformer编码层

前情回顾 前面我们已经实现一个图像嵌入层和顶层的模型调度&#xff1a; class SiglipVisionTransformer(nn.Module): ##视觉模型的第二层&#xff0c;将模型的调用分为了图像嵌入模型和transformer编码器模型的调用def __init__(self, config:SiglipVisionConfig):super().__i…...

LightTrack + VOT2019 + Jetson 部署全流程指南【轻量级目标跟踪】

LightTrack VOT2019 Jetson 部署全流程指南【轻量级目标跟踪】 &#x1f527; 1. 环境准备&#xff08;Jetson 平台&#xff09;推荐配置&#xff1a;⚙️ 安装 Python 3.6 虚拟环境&#xff08;Jetson 原生 Python 版本较新&#xff09; &#x1f4e5; 2. 下载 LightTrack 源…...

【Easylive】视频删除方法详解:重点分析异步线程池使用

【Easylive】项目常见问题解答&#xff08;自用&持续更新中…&#xff09; 汇总版 方法整体功能 这个deleteVideo方法是一个综合性的视频删除操作&#xff0c;主要完成以下功能&#xff1a; 权限验证&#xff1a;检查视频是否存在及用户是否有权限删除核心数据删除&…...

(C语言)循环单链表(数据结构)(指针)(循环列表教程)

目录 源代码&#xff1a; 代码详解&#xff1a; 1. 头文件和宏定义 2. 类型定义 3. 初始化链表 4. 判断链表是否为空 5. 求链表的长度 6. 清空链表 7. 销毁链表 8. 链表的插入&#xff08;头插法&#xff09; 9. 链表的插入&#xff08;尾插法&#xff09; 10. 查看…...

Debian 12 服务器搭建Beego环境

一、Debian 12系统准备 1.更新系统 #apt update && apt upgrade -y 2.安装基础工具 #apt install -y git curl wget make gcc 二、安装Go环境 Go语言的镜像官网&#xff1a;https://golang.google.cn/ 1.下载go最新版 #cd /usr/local/src #wget -o https://golang.go…...

淘宝商品评论API接口概述及JSON数据参考(测试)

前言 一、淘宝商品评论API接口概述 淘宝商品评论API接口是淘宝开放平台提供的一项服务&#xff0c;允许开发者通过HTTP请求获取指定商品的评论数据。这些数据包括评论内容、评论者信息、评分、评论时间等&#xff0c;为开发者提供了丰富的商品评价信息&#xff0c;有助于分析…...

AI:决策树、决策森林与随机森林

决策树与随机森林:从原理到实战的全面解析(2025最新版) 引言 在机器学习的世界里,决策树和森林模型(包括随机森林)常常是数据科学家们常用的工具之一。无论是初学者还是资深从业者,理解这些模型的原理和应用,都能帮助你在数据分析和预测任务中获得更好的结果。本文将…...

图形化编程语言:低代码赛道的技术革命与范式突破

在 2024 年 Gartner 低代码平台魔力象限报告中&#xff0c;传统低代码厂商市场份额增速放缓至 12%&#xff0c;而图形化编程语言赛道融资额同比激增 370%。本文深度剖析低代码平台的技术瓶颈&#xff0c;系统阐释图形化编程语言的核心优势&#xff0c;揭示其如何重构软件开发范…...

EdgeInfinite: 用3B模型处理无限长的上下文

论文标题 EdgeInfinite: A Memory-Efficient Infinite-Context Transformer for Edge Devices 论文地址 https://arxiv.org/pdf/2503.22196 作者背景 vivo&#xff0c;浙江大学 代码 The code will be released after the official audit. 动机 self-attention的二次时…...

大模型论文:Improving Language Understanding by Generative Pre-Training

大模型论文&#xff1a;Improving Language Understanding by Generative Pre-Training OpenAI2018 文章地址&#xff1a;https://www.mikecaptain.com/resources/pdf/GPT-1.pdf 摘要 自然语言理解包括各种各样的任务&#xff0c;如文本蕴涵、问题回答、语义相似性评估和文…...

springboot 项目怎样开启https服务

要在Spring Boot项目中启用HTTPS服务&#xff0c;请按照以下步骤操作&#xff1a; 1. 生成SSL证书密钥库 使用keytool生成自签名证书 在终端或命令行工具中运行以下命令&#xff0c;生成一个PKCS12格式的密钥库文件&#xff1a; keytool -genkeypair -alias myapp -keyalg …...

R语言之mlr依赖包缺失警告之分析

因为本地没有网络&#xff0c;所有相关的依赖包都是手动下载&#xff0c;再使用脚本一键安装的。 在使用mlr包时&#xff0c;执行下面的代码时&#xff0c;总是报各种依赖缺失&#xff0c;也不知道咋看FAIL信息。 # 建模与调参 # 查阅线性回归、随机森林、xgboost和KNN四种模…...

如何记录日常笔记

关于用Obsidian记日常笔记这事儿&#xff0c;我的经验是别想得太复杂。刚开始用的时候总想着要搞个完美的分类系统&#xff0c;后来发现简单粗暴反而最实用。 文件夹分两类就够了——比如「工作记录」扔一个文件夹&#xff0c;「读书笔记」扔另一个&#xff0c;别分太细&#…...

Completablefuture的底层原理是什么

参考面试回答&#xff1a; 个人理解 CompletableFuture 是 Java 8 引入的一个类、它可以让我们在多线程环境中更加容易地处理异步任务。CompletableFuture 的底层原理是基于一个名为 FutureTask 的机制、结合了 监听器模式 和 等待-通知机制 来处理异步计算。 1.首先就是Com…...