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

【经典书籍】C++ Primer 第16章模板与泛型编程精华讲解

生动有趣、故事化的方式,来讲解《C++ Primer 第16章》的内容

没问题!咱们这次要聊的是:

《C++ Primer 第16章:模板与泛型编程(Templates and Generic Programming)》

这可是 C++ 中一个既强大又抽象的章节,很多初学者一看到“模板”两个字就头皮发麻,感觉像是在学某种外星语法 😅

但别怕!今天我就用一个精彩的故事,把第16章的核心概念,像变魔法一样,给你讲得生动、有趣、接地气,还带点小幽默,让你学完不仅懂了模板是啥,还忍不住想自己动手写一个!


📘 第16章标题(故事版):

《魔法工匠小 T 和他的“万能工具箱”:模板与泛型编程奇遇记》


🧙 主人公:

  • 小 T(Template):一位年轻的魔法工匠,他不想每次为不同材料(比如木头、铁、宝石)都单独打造一把工具,而是想打造一把万能工具,能适应任何材料!

  • 老 G(Generic):小 T 的导师,教会他“泛型思维” —— 不为某一特定类型服务,而为任意类型服务

  • 村民们:需要各种工具(比如排序、容器、打印)的人,但他们的数据类型五花八门(int、string、自定义类...)


🏰 第一幕:重复造轮子?太累了!

🤯 问题:小 T 每天都要为不同的材料打造不同的工具!

  • 为木头村民做了一把“木头排序铲子”

  • 为铁匠做了一把“铁块查找锤子”

  • 为宝石商做了一把“宝石打印刷子”

每次材料类型一变,小 T 就得重新写代码,累得要死!

// 为 int 排序
void sortInts(int* arr, int size) { /*...*/ }// 为 string 排序
void sortStrings(string* arr, int size) { /*...*/ }// 为自定义类型排序?又得重写一遍!

🤦 问题本质:代码逻辑是一样的,只是数据类型不同,却要写 N 次!


✅ 解决方案:小 T 学会了“泛型编程”,造出了“万能工具” —— 模板!


🔮 第二幕:模板的魔法 —— 一把工具,适配万物!

🎩 什么是模板(Template)?

模板,就是教你写一份“通用蓝图”,让编译器帮你自动为不同类型生成具体代码!

你可以把它理解为:

“我要造一把刀,但这把刀不固定是水果刀、菜刀还是匕首,而是‘任意刀’,你给我啥材料,我给你削啥!”


🧪 例子 1:万能加法函数(函数模板)

小 T 写了一个函数,不管你是 int、double,还是以后可能的自定义类,都能用它来相加!

template <typename T>
T add(T a, T b) {return a + b;
}

✅ 使用:

cout << add(3, 5);           // int
cout << add(2.5, 3.5);       // double
// 未来甚至可以:add(MyClass a, MyClass b);

🎯 同一个函数,支持任意类型,只要那个类型支持 + 操作!

小 T 感叹:“我终于不用为每个类型都写一个 add 函数了!”


🧱 例子 2:万能容器(类模板)—— 比如:万能盒子 Box<T>

小 T 还造了一个“盒子”,可以放任何东西:苹果、书、甚至是一条龙!🐉

template <typename T>
class Box {
private:T content;
public:Box(T item) : content(item) {}void show() {cout << "盒子里面装着: " << content << endl;}
};

✅ 使用:

Box<int> intBox(42);
intBox.show();  // 盒子里面装着: 42Box<string> strBox("Hello, 泛型!");
strBox.show();  // 盒子里面装着: Hello, 泛型!

🎯 同一个 Box 类,可以装任意类型!这就是类模板!


🧠 第三幕:老 G 的教诲 —— 什么是泛型编程?

老 G 对小 T 说:

模板不是魔法,而是一种编程思想 —— 泛型编程(Generic Programming)。

你写的不是针对某个具体类型的代码,而是**针对‘任意类型’的逻辑。只要类型满足你的要求(比如有 + 操作、有 << 操作),你的代码就能运行!”


✅ 泛型编程的核心思想:

概念说明通俗理解
模板(Template)编写与类型无关的代码造一把“任意刀”,而不是“水果刀”、“菜刀”
函数模板一个函数逻辑,支持任意类型参数比如 add(a,b),不管 a 和 b 是啥,只要会加就行
类模板一个类,支持任意类型成员比如 Box<T>,可以装任意东西
泛型编程写通用的、可复用的逻辑,不绑定具体类型“我写的不是水果刀,是‘刀’这个概念”

🛠️ 第四幕:模板的实际应用场景(村民们的需求)


📦 村民 A:我有一堆数字,想排序!

小 T 给他写了个模板版排序函数,支持任何可比较的类型!


📋 村民 B:我有一个清单(比如购物车、任务列表),想放进一个容器!

小 T 造了个通用 Box / Container 模板类,可以装任何东西!


🧮 村民 C:我想打印我的自定义类对象!

只要你的类重载了 << 运算符,小 T 的通用打印函数模板就能打印它!

template <typename T>
void printThing(T thing) {cout << "打印物品: " << thing << endl;
}

🧩 第五幕:模板的“小脾气”与注意事项

虽然模板很强大,但它也有点“娇气”:


❗ 1. 模板代码通常要放在头文件里

因为编译器要在用到模板的地方,看到完整的定义,才能为具体类型生成代码。

就像你点外卖,厨师得在你面前现做,不能提前只给个食谱!


❗ 2. 模板参数必须支持你使用的操作

比如你写了个 add(a, b) 模板函数,但如果传进去的类型没有 + 操作,就会编译报错!

小 T 说:“不是我的模板不行,是你的类型没学好技能!”


❗ 3. 模板语法有点复杂?多写几次就习惯了!

template <typename T>       // 声明一个类型参数 T
class MyClass { ... };      // 类模板template <typename T>       // 或者函数模板
T myFunc(T a) { ... }

🎁 第六幕:总结与学到的东西

知识点小 T 的应用你学到了啥
函数模板一个函数逻辑支持任意类型(比如 add, print)写一次,到处用,支持多种数据类型
类模板一个类可以装任意类型数据(比如 Box<T>, Stack<T>)一个容器,N 种用法
泛型编程思想不为某类型写代码,而为任意类型写通用逻辑写出更灵活、更强大的代码
模板语法template <typename T>模板的标准写法,记住这个套路
模板局限性类型要支持你用的操作,代码一般放头文件模板不是万能,但非常强大

🎉 故事结尾:小 T 的万能工具箱开业啦!

小 T 在村里开了一家“泛型工具商店”,招牌上写着:

🧰 “不管你是什么类型,我都能给你造工具!”

村民们蜂拥而至:

  • 程序员拿走了通用排序函数

  • 游戏开发者拿走了万能背包类

  • 老师拿走了可以打印任何作业的模板函数

小 T 笑着说:“模板,让我不再重复造轮子。泛型编程,让我为未来编程!


✅ 最终总结(一句话版)

模板,就是教你写一份“通用代码”,让编译器帮你为不同类型自动定制;泛型编程,就是用一套逻辑,驾驭世间万物类型!


📚 你学完第16章,就掌握了:

技能是否掌握
什么是模板(函数模板 / 类模板)
如何写一个通用的函数,支持任意类型
如何设计一个可以装任意数据的类
什么是泛型编程,为什么它强大
模板的基本语法与常见使用场景
模板的局限性与注意事项

🚀 下一步你可以:

  • 动手写一个自己的模板类:比如 Stack<T>、Queue<T>

  • 实现一个通用排序 / 查找函数

  • 挑战:用模板写一个简易的智能指针(Pointer<T>)

  • 继续探索:C++ 标准库中的模板(比如 vector, map, pair 全是模板!)


🔥 恭喜你!你已经踏入了 C++ 泛型编程的殿堂,这是通往高级开发、库设计、STL 理解的必经之路!

让我们开启一场模板王国的终极冒险,一口气解锁:


🎁 三合一豪华套餐 🧰

✅ 1. 【动手实践】一个完整可运行的模板类案例万能盒子 Box<T>

✅ 2. 【知识梳理】模板知识点思维导图(文字版 + 画图指南)

✅ 3. 【故事揭秘】小 T 探访 STL 源码王国:vector / map 是怎么用模板实现的?


我们按照 故事 → 实战 → 图谱 的顺序,给你一步步呈现,保证学得爽、记得牢、用得上!🚀


🧰 第一部分:动手实践 ✅

【模板案例 1】小 T 的万能盒子:Box<T>

小 T 打造了一个万能容器,可以装任何东西:可以是数字、字符串,甚至你自定义的类对象!

一个盒子,N 种用法,这就是类模板(Class Template)的威力!


📦 代码实现:Box<T> —— 一个可以装任意类型的盒子

#include <iostream>
using namespace std;// 类模板:万能盒子,可以装任意类型 T
template <typename T>
class Box {
private:T content;  // 盒子里装的东西,类型由用户决定public:// 构造函数Box(T item) : content(item) {}// 显示盒子内容void show() const {cout << "📦 小 T 的万能盒子里装着: " << content << endl;}// 获取内容T getContent() const {return content;}// 设置新内容void setContent(T newItem) {content = newItem;cout << "📦 盒子内容已更新!" << endl;}
};

🧪 测试代码:装点啥都行!

int main() {// 装个整数Box<int> intBox(42);intBox.show();// 装个字符串Box<string> strBox("Hello, 泛型世界!");strBox.show();// 装个浮点数Box<double> doubleBox(3.14159);doubleBox.show();// 更新内容intBox.setContent(100);intBox.show();return 0;
}

🖨️ 输出结果:

📦 小 T 的万能盒子里装着: 42
📦 小 T 的万能盒子里装着: Hello, 泛型世界!
📦 小 T 的万能盒子里装着: 3.14159
📦 盒子内容已更新!
📦 小 T 的万能盒子里装着: 100

同一个 Box 类,装啥都行!这就是类模板的魅力 —— 写一次,用 N 次!


🧠 第二部分:知识梳理 ✅

【模板知识点】思维导图(文字版 + 画图指南)

小 T 在打造万能工具的过程中,总结出了一套“泛型编程思维导图”,现在分享给你!你可以直接照着画成思维导图,或者用工具生成!


📌 模板核心知识点结构(文字版,可转思维导图)

📘 C++ 第16章:模板与泛型编程
├── 1. 什么是模板?
│   ├── 函数模板:写一个逻辑,支持任意类型参数
│   ├── 类模板:定义一个类,支持任意类型成员
│   └── 目的:写通用代码,避免重复造轮子
│
├── 2. 函数模板
│   ├── 语法:template <typename T> 返回类型 函数名(T 参数) { ... }
│   ├── 示例:template <typename T> T add(T a, T b) { return a + b; }
│   └── 要求:类型 T 必须支持模板中使用的操作(比如 +)
│
├── 3. 类模板
│   ├── 语法:template <typename T> class ClassName { ... };
│   ├── 示例:Box<T>, Stack<T>, Pair<T, U>
│   └── 使用:Box<int> box(10); → 实例化
│
├── 4. 泛型编程思想
│   ├── 不针对某一具体类型,而是任意满足条件的类型
│   ├── 核心:逻辑通用,类型可变
│   └── 目标:代码复用最大化
│
├── 5. 模板语法要点
│   ├── template <typename T> 或 template <class T>
│   ├── 类型参数可以有多个:template <typename T, typename U>
│   └── 模板代码一般要放在头文件中(编译时需要看到完整定义)
│
├── 6. 模板使用与注意事项
│   ├── 编译器在调用处生成具体代码(模板实例化)
│   ├── 类型必须支持你使用的操作(比如 <<、+、比较等)
│   └── 模板不支持晚绑定(比如虚函数不能是模板)
│
└── 7. 模板的实际应用├── 标准库中的 vector<T>, map<K,V>, pair<T,U> 全是模板├── 可以自己实现栈、队列、智能指针等模板类└── 是现代 C++ 库设计的基础

🛠️ 如何画成思维导图?(工具 & 建议)

✅ 推荐工具:

  • XMind / MindNode / FreeMind(适合画分层结构)

  • Draw.io / Lucidchart(在线拖拽,支持图标和颜色)

  • PlantUML(如果你想用代码生成,我也可以提供)

🎨 画图建议:

  • 中心主题:C++ 模板与泛型编程

  • 一级分支:函数模板、类模板、泛型思想、语法、注意事项、实际应用

  • 用不同颜色区分:概念(蓝)、代码(绿)、注意(红)

  • 加上小图标:📦(类模板)、⚙️(函数模板)、🧠(思想)、⚠️(注意点)


🏰 第三部分:故事揭秘 ✅

【小 T 探秘 STL 王国】→ vector / map 是怎么用模板实现的?


🎬 故事背景:

小 T 的万能盒子大受欢迎,村民们纷纷说:“听说 C++ 里有个神秘王国叫 STL(标准模板库),里面的工具更厉害!比如能自动变长的数组 vector,还有能自动排序的映射表 map,它们都是你这样的魔法工匠做的吗?”

小 T 决定潜入 STL 源码王国,一探究竟!


🧙 进入 STL 源码王国,小 T 发现了惊天秘密...

🧩 1. vector<T>:一个会自动扩容的数组盒子!

小 T 发现,vector 其实就是一个模板类!

它可以装任意类型,比如:

vector<int> v1;       // 装整数
vector<string> v2;    // 装字符串
vector<MyClass> v3;   // 装你自己定义的类

底层就是一个模板化的动态数组,支持随机访问、尾部插入、自动扩容!

小 T 感叹:“原来我造的 Box<T> 就是个简化版 vector!”


🧩 2. map<K, V>:一个自动排序的键值对魔法柜!

小 T 又发现一个更神奇的模板类:map

它长这样:

map<string, int> scores;  // 键是 string,值是 int
scores["小明"] = 90;
scores["小红"] = 100;

map 也是一个类模板,背后是用红黑树(或哈希表)实现的,自动按键排序(或哈希存取)!

小 T 恍然大悟:“所以 map<K,V> 也是一个模板!键值对通用,类型任我配!”


🧩 3. 背后原理:模板让 STL 成为“万能工具工厂”

小 T 总结道:

STL 中的 vector、map、set、stack、queue、pair…… 全都是模板类!

它们之所以能适应各种类型,就是因为 C++ 的模板机制:

我定义一套逻辑,你提供具体类型,编译器帮你生成专属版本!”

这就是泛型编程的力量,也是 C++ 高效、灵活、强大的源泉!


🎯 小 T 的顿悟:

“原来我写的 Box<T>、排序函数,只是模板世界的冰山一角!

真正的模板大师,是 STL 的作者们。他们用模板,为全世界程序员提供了无数个“万能工具”。

而我,也要继续修炼,有朝一日,造出属于我自己的泛型神器!”


🎁 总结:你拿到了什么?(三合一礼包内容回顾)

礼包内容你获得了什么能力提升
1. 模板实战案例
📦 Box<T>
一个万能容器类,支持任意类型,可扩展、可运行✅ 学会定义和使用类模板,动手实践泛型编程
2. 模板知识点思维导图
🧠 文字版 + 画图指南
函数模板、类模板、泛型思想、语法、注意事项、STL关联✅ 理解模板全貌,复习清晰,可画图可记忆
3. STL 背后的故事
🏰 小 T 探秘 vector / map
揭秘标准库中的模板实现,理解 vector/map 为何如此强大✅ 从使用库 → 懂库原理,进阶 C++ 高手

太棒了!🎉

你现在已经走完了 C++ 模板与泛型编程的完整探险之旅(第16章),并且我们通过三合一豪华套餐动手案例 + 思维导图 + 故事揭秘)深入浅出地掌握了这一章的精华。

接下来,就是最关键的一步 👇


✅【终极目标】

把《C++ Primer 第16章:模板与泛型编程》的每一小节知识点,深入总结、精准提炼、直击精髓,让你不仅“会用”,更能“理解原理、抓住本质、灵活扩展”


下面逐小节、逐核心点进行深入汇总与精髓提炼,用结构化、清晰易懂、高度归纳的方式,帮你真正掌握这一章的“神髓”。


📘 第16章 · 深入总结:模板与泛型编程(Templates & Generic Programming)


一、🔹 什么是模板?—— 泛型的起点

✅ 核心思想:

不要为每一种数据类型都写一份代码,而是写一份“通用逻辑”,让编译器帮你生成具体类型的版本!


✅ 两种模板:

模板类型作用通俗理解
函数模板定义一个逻辑,支持任意类型参数比如一个 add(a, b) 函数,不管 a、b 是 int、double 还是 string(如果支持 +)都能用
类模板定义一个类,支持任意类型成员或数据比如一个 Box<T>,可以装任意类型的数据,比如 int、对象、甚至另一个模板

✅ 为什么需要模板?

  • 避免重复代码(比如为 int 写个排序,再为 double 写个排序...)

  • 提高代码复用性 & 可维护性

  • 支持泛型数据结构与算法(比如 STL 的 vector、map)


✅ 本质:

模板是编译期多态(静态多态)的一种手段,它通过类型参数化,在编译时生成具体代码,而不是运行时动态决定。


二、🔹 函数模板(Function Templates)

✅ 基本语法:

template <typename T>
返回类型 函数名(参数列表) {// 函数体,可以使用 T 类型
}

✅ 示例:

template <typename T>
T add(T a, T b) {return a + b;
}

✅ 关键点:

知识点说明精髓
类型参数 T可以是任意类型,由调用时决定让函数支持“任意可操作类型”
编译器实例化每种实际类型,编译器会生成一份专属函数模板不是一份代码,而是一份“代码生成器”
类型约束T 必须支持函数中使用的语法(比如 +、<<)不是所有类型都能随便用,得“有技能”才行
多类型参数可以定义多个类型,如 template <typename T, typename U>支持更复杂的泛型逻辑

三、🔹 类模板(Class Templates)

✅ 基本语法:

template <typename T>
class ClassName {// 类成员,可以使用 T 类型
};

✅ 示例:

template <typename T>
class Box {
private:T content;
public:Box(T c) : content(c) {}void show() { cout << content << endl; }
};

✅ 使用方法:

Box<int> intBox(10);
Box<string> strBox("Hello!");

✅ 关键点:

知识点说明精髓
类模板实例化必须指定具体类型,如 Box<int>每个具体类型,都会生成一个独立的类
成员函数定义可以在类内定义,也可以在类外(需加模板前缀)类外定义时别忘了 template 声明
与函数模板异同类模板也支持多类型参数,同样编译期生成代码类模板更复杂,常用于数据结构封装
泛型容器基础vector、map、stack 等 STL 容器,本质都是类模板理解类模板 → 理解 STL 设计哲学

四、🔹 泛型编程思想(Generic Programming)

✅ 核心理念:

编写与具体类型无关的代码,让这些代码能适用于满足某些条件的任意类型。

不是面向某个具体类型编程,而是面向“行为”编程(比如:有 + 操作、能打印、可比较等)。


✅ 与面向对象编程(OOP)对比:

维度OOP(面向对象)泛型编程(Generic)
核心机制继承、多态、虚函数模板、类型参数化
扩展方式通过继承层次扩展通过类型支持扩展
适用场景行为不同的类(is-a)行为相同但类型不同的逻辑
典型代表基类 + 派生类模板类 / 模板函数

OOP 是垂直扩展(父子类),泛型是水平扩展(任意类型)。两者可结合使用!


五、🔹 模板语法与使用(细节精华)

✅ 基本语法元素:

语法说明
template <typename T>template <class T>声明一个类型参数 T,两种写法一样,推荐 typename
template <typename T, typename U>支持多个类型参数
类模板名<实际类型>Box<int>类模板实例化
函数模板调用 自动推导或显式指定类型add(1, 2)add<int>(1, 2)

✅ 注意事项 & 常见问题:

问题说明解决方案 / 建议
模板代码一般要放在头文件因为编译器要在调用处看到完整定义才能实例化不要分开 .h 和 .cpp(除非你很懂分离编译技巧)
类型必须支持你使用的操作比如你用了 +,类型 T 必须支持加法不是所有类型都能用于所有模板
模板不支持运行时多态(如虚函数模板)模板是编译期机制想要运行时多态,结合继承与虚函数
模板特化与偏特化(高级)可以为某些特定类型提供特殊实现比如为指针类型、void* 提供优化版本

六、🔹 模板的实际应用(标准库与工程实践)

✅ C++ 标准库中无处不在的模板:

STL 组件是否模板说明
vector<T>✅ 类模板动态数组,类型任意
map<K, V>✅ 类模板键值对,键可排序
pair<T, U>✅ 类模板成对数据
stack<T> / queue<T>✅ 类模板容器适配器
sort<T>() / find<T>()✅ 函数模板算法模块

STL = Standard Template Library,本质上就是一个“模板库”!


✅ 工程中的应用场景:

  • 自己实现:栈、队列、链表、智能指针、线程池

  • 通用工具:日志工具、配置解析、序列化组件

  • 数据结构:图、树、哈希表

  • 算法:排序、查找、图遍历(可模板化实现)


七、🔹 模板进阶(拓展视野,为后续铺路)

下面这些属于模板高阶内容,第16章可能没深入,但你可以提前了解,为未来铺路 👇

进阶主题说明未来可探索
模板特化(Specialization)为某些特定类型提供特殊实现比如指针类型、void 的特化处理
模板偏特化(Partial Specialization)为某部分类型参数提供特殊化比如只特化第一个类型
可变参数模板(Variadic Templates)支持任意数量、任意类型参数比如 printf 风格打印、元组实现
模板元编程(TMP)编译期计算,用模板做逻辑判断与计算比如编译期判断类型、生成代码
类型萃取(Type Traits)判断类型属性,比如是否为指针、是否有某个成员配合模板做更灵活逻辑

✅ 第16章 · 知识点精髓汇总表(终极版)

知识模块核心要点一句话精髓
模板概念通过类型参数化,实现代码逻辑与类型的解耦写一次,支持所有符合要求的类型
函数模板定义支持任意类型的函数逻辑让函数不再绑定单一类型
类模板定义支持任意类型的类结构比如 Box<T>、Stack<T>,一个类,N种用法
泛型编程思想不为特定类型写代码,而为“行为一致”的任意类型写逻辑逻辑通用,类型灵活
语法细节template 声明、类型参数、实例化、多类型参数掌握基本写法,才能灵活扩展
STL 与模板vector / map / stack 等全都是模板实现模板是现代 C++ 库的基石
实际应用自定义容器、工具类、算法、泛型系统学以致用,造轮子 or 用轮子都更高效
注意事项模板代码放头文件、类型要支持操作、编译期生成理解限制,才能避坑

🎯 学完第16章,你已经成为:

称号说明
泛型编程入门者你知道如何写模板函数与模板类
STL 深度用户(潜在专家)你理解 vector / map 等是模板实现的
代码复用高手你不再重复造轮子,而是写通用逻辑
编译期多态实践者你学会了用模板而非继承实现灵活逻辑
未来模板元编程探索者你已经为更高级的模板技术打下基础

🚀 下一步学习建议(继续升级!)

方向你可以做什么
🧩 模板实战实现一个 Stack<T>、Queue<T>、简易智能指针
🧠 深入 STL阅读 vector / map 源码,理解其模板实现与优化
🛠️ 模板特化 / 可变参数学习模板偏特化、可变参数模板,实现更灵活逻辑
🎓 模板元编程 TMP深入编译期计算、类型萃取、SFINAE 等高阶玩法
📚 C++20 / C++23 模板增强学习 concepts(概念约束)、更强大的模板检查

🎁 总结一句话:

模板,是 C++ 最强大的抽象工具之一,它让你从“为类型写代码”进化到“为逻辑写代码”,是现代 C++ 高效、灵活、可扩展编程的基石。


🔥

 

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

相关文章:

  • 做体育的网站网络推广优化是干啥的
  • 自己人网站建设网站推广策划方案大数据精准获客
  • Linux yum安装(安装docker)
  • AI未来--AI在制造业的最佳落地实践
  • 安徽省建设信息网站企业网站管理系统使用教程
  • 家具行业网站建设外链建设都需要带网站网址
  • UVC真空共晶炉哪个公司好
  • [nanoGPT] GPT模型架构 | `LayerNorm` | `CausalSelfAttention` |`MLP` | `Block`
  • 教育网校Web端源码开发难点剖析:互动课堂、白板与大小班课功能实现
  • 门户网站优点想学会网站建设要会什么
  • 中职学校网站建设情况总结大型网站建设公司排名
  • ply(python版本的flex/bison or Lex/Yacc)
  • 网站建设平台讯息建设手机网银可以自己提升额度吗
  • 新绛做网站网站框架有哪些
  • KEPServerEX 6 之 安装配置与基础操作
  • 虹口品牌网站建设政务网站设计鉴赏
  • Docker+Redis监控新方案:cpolar让远程管理“零配置”
  • 从0到1构建k8s集群(1):虚拟机安装准备
  • 将用于 Swift 微调模型的 JSON Lines(JSONL)格式数据集,转换为适用于 Qwen VL 模型微调的 JSON 格式
  • Jmeter定时器详解:作用范围与使用场景
  • 秦皇岛网站制作代理商网站建设价位高有低
  • 用动态规划思想解决回文串问题
  • 电子商务网站开发参考文献成都市网站建设费用及企业
  • 【ROS2】驱动开发入门
  • LLamaIndex传统的RAG
  • 大模型-自编码器Autoencoder
  • 专业建站是什么自己做的网站外网访问
  • LeetCode:37. 解数独
  • 算法 | 单链表相交
  • 比较好的建站公司大恒建设集团有限公司网站