【经典书籍】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();  // 盒子里面装着: 42

Box<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++ 高效、灵活、可扩展编程的基石。


🔥

相关推荐
屁股割了还要学4 小时前
【Linux入门】常用工具:yum、vim
linux·运维·服务器·c语言·c++·学习·考研
仰泳的熊猫4 小时前
LeetCode:51. N 皇后
数据结构·c++·算法·leetcode
workflower4 小时前
基本作业-管理⾃⼰的源代码
开发语言·单元测试·软件工程·需求分析·个人开发
froginwe114 小时前
Pandas DataFrame:深入理解数据分析的利器
开发语言
Jm_洋洋5 小时前
【Linux系统编程】程序替换:execve(execl、execlp、execle、execv、execvp、execvpe)
linux·运维·c语言·开发语言·程序人生
小莞尔5 小时前
【51单片机】【protues仿真】基于51单片机秒表计时器系统(带存储)
c语言·stm32·单片机·嵌入式硬件·物联网·51单片机
冯诺依曼的锦鲤5 小时前
算法练习:前缀和专题
开发语言·c++·算法
闭着眼睛学算法5 小时前
【双机位A卷】华为OD笔试之【哈希表】双机位A-跳房子I【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·c++·python·算法·华为od·散列表
JinSoooo5 小时前
pnpm monorepo 联调:告别 --global 参数
开发语言·javascript·ecmascript·pnpm