c++:库(Library)
目录
什么是库?
C++中库的两种形态:静态库 和 动态库
静态链接 vs 动态链接(链接 ≠ 库)
🔒 静态链接(Static Linking)
🔗 动态链接(Dynamic Linking)
C++标准库(Standard Library)
标准模板库 STL(Standard Template Library)
总结 & 结构图解
什么是库?
库就是一堆 别人写好的代码打包好的文件,让你可以直接调用里面的函数或类,而不需要自己从零写。
举个例子:
你要排序一个数组,不必自己写冒泡排序或快排,只要用库函数:
#include <algorithm>
std::sort(array, array + n);
你就像用现成的“排序工具”,节省了造轮子的时间。
C++中库的两种形态:静态库 和 动态库
类型 | 后缀名(Windows) | 被使用时 | 优点 | 缺点 |
---|---|---|---|---|
静态库 | .lib | 编译时嵌入程序 | 无需额外依赖 | 文件体积大、难更新 |
动态库 | .dll | 程序运行时加载 | 程序更小,可共享更新 | 运行时需要额外文件 |
Linux 下 | .a (静态).so (动态) |
静态链接 vs 动态链接(链接 ≠ 库)
链接(Linking)是把你的代码和库的代码“拼装”成一个完整程序的过程。
🔒 静态链接(Static Linking)
-
编译阶段,库的内容直接复制进你的程序。
-
程序编译后独立,无需外部依赖。
-
缺点:程序体积大;库升级需要重新编译整个程序。
🔗 动态链接(Dynamic Linking)
-
编译时只记录“我要用这个库”
-
运行时才加载
.dll
或.so
文件 -
缺点:程序运行依赖外部库,缺失会导致运行失败
C++标准库(Standard Library)
C++ 自带的“官方工具箱”,包括以下模块:
模块 | 功能 |
---|---|
<iostream> | 输入输出(cin , cout ) |
<vector> , <list> | 常用容器 |
<algorithm> | 各种算法(排序、查找等) |
<cmath> | 数学函数(sqrt, pow) |
<functional> | 函数对象、回调 |
示例:
#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> v = {3, 1, 4};std::sort(v.begin(), v.end());for (int x : v) std::cout << x << " ";
}
标准模板库 STL(Standard Template Library)
STL 是 C++ 标准库的一个子集,包含这三大核心:
-
容器(Containers):装数据的
vector
,list
,map
,unordered_map
,set
等 -
算法(Algorithms):对数据操作
sort
,find
,count
,accumulate
等 -
迭代器(Iterators):容器访问器
它像“指针”,可以遍历任何容器
示例:
#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> nums = {5, 2, 9, 1};std::sort(nums.begin(), nums.end()); // 使用算法for (auto it = nums.begin(); it != nums.end(); ++it) {std::cout << *it << " "; // 使用迭代器访问容器}
}
输出:1 2 5 9
-
vector
是容器 -
sort
是算法 -
begin()
/end()
是迭代器
⛳ STL 的优势:
-
模板化设计(泛型编程):适用于任何类型
-
高性能实现:效率极高,工业级别
-
统一接口:所有容器用法一致,降低学习成本
总结 & 结构图解
+----------------------+| C++ Standard Lib |+----------------------+/ | \/ | \+--------+ +----------+ +--------+| IO | | STL | | Math |+--------+ +----------+ +--------+|+-----------+-----------+| | |Containers Algorithms Iterators