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++ 标准库的一个子集,包含这三大核心:

  1. 容器(Containers):装数据的

    vector, list, map, unordered_map, set
  2. 算法(Algorithms):对数据操作

    sort, find, count, accumulate
  3. 迭代器(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/905009.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/905009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java线程池深度解析:从使用到原理全面掌握

在高并发场景下&#xff0c;线程管理是提升系统性能的关键。本文将深入探讨Java线程池的核心机制&#xff0c;带你从基础使用到底层实现全面掌握这一重要技术。 一、线程池存在的意义 1.1 线程的隐形成本 尽管线程相比进程更轻量&#xff0c;但当QPS达到万级时&#xff1a; 频…

PostgreSQL 的 pg_advisory_lock_shared 函数

PostgreSQL 的 pg_advisory_lock_shared 函数详解 pg_advisory_lock_shared 是 PostgreSQL 提供的共享咨询锁函数&#xff0c;允许多个会话同时获取相同键值的共享锁&#xff0c;但排斥排他锁。 共享咨询锁 vs 排他咨询锁 锁类型共享锁 (pg_advisory_lock_shared)排他锁 (pg…

Halcon之计算抓取螺母的位姿

文章目录 1&#xff0c;项目说明。2&#xff0c;注意事项3&#xff0c;关联的主要算子3.1&#xff0c; gen_parallels_xld 3.2 &#xff0c;convert_pose_type 4&#xff0c;程序流程。5&#xff0c;代码6&#xff0c;Demo链接。 1&#xff0c;项目说明。 Robot标定使用的模式…

互联网大厂Java求职面试:AI集成场景下的技术挑战与架构设计

标题&#xff1a;互联网大厂Java求职面试&#xff1a;AI集成场景下的技术挑战与架构设计 第一幕&#xff1a;向量数据库选型与性能调优 技术总监&#xff08;严肃脸&#xff09;&#xff1a; 郑薪苦&#xff0c;我们最近在做一个基于大语言模型的企业级AI应用&#xff0c;需要…

ABB电机控制和保护单元与Profibus DP主站转Modbus TCP网关快速通讯案例

ABB电机控制和保护单元与Profibus DP主站转Modbus TCP网关快速通讯案例 在现代工业自动化系统中&#xff0c;设备之间的互联互通至关重要。Profibus DP和Modbus TCP是两种常见的通信协议&#xff0c;分别应用于不同的场景。为了实现这两种协议的相互转换&#xff0c;Profibus …

智慧农业、智慧养殖平台—监控摄像头管理监控设计—仙盟创梦IDE

智慧养殖 监控摄像头是核心管理工具&#xff0c;主要通过以下方式提升养殖效率与管理水平&#xff1a; 环境实时监测&#xff1a;对养殖区域进行全天候可视化监控&#xff0c;及时捕捉温度、湿度、通风等环境要素变化&#xff0c;确保动物生存环境稳定 。例如在规模化猪场&…

YOLO 从入门到精通学习指南

一、引言 在计算机视觉领域,目标检测是一项至关重要的任务,其应用场景广泛,涵盖安防监控、自动驾驶、智能交通等众多领域。YOLO(You Only Look Once)作为目标检测领域的经典算法系列,以其高效、快速的特点受到了广泛的关注和应用。本学习指南将带领你从 YOLO 的基础概念…

Java 24新特性深度解析:从优化技巧到高手进阶指南

一、Java 24核心新特性详解 Java 24作为长期支持版本(LTS)&#xff0c;带来了许多令人振奋的新特性&#xff0c;下面我们将深入探讨其中最值得关注的改进。 1. 字符串模板&#xff08;String Templates&#xff09;正式发布 字符串模板结束了Java字符串拼接的混乱时代&#…

《类和对象(中)》

引言&#xff1a; 上次我们主要学习了类的相关知识&#xff0c;今天我们就来学习类和对象(中)&#xff0c;今天也会用到之前学习过的东西&#xff0c;可以说是前面知识的结合&#xff0c;较前面会难一点&#xff08;打个预防针&#xff09;。 一&#xff1a;类的默认成员函数…

为什么 AI 理解不了逻辑问题?

人类擅长“如果 A 则 B”,AI 擅长“这个像那个”。逻辑推理?对它来说是一场灾难性的认知挑战。 前言 在实际使用 AI(尤其是大型语言模型,比如 GPT、Claude、Gemini 等)时,我们常发现一个诡异的现象:它们文采斐然,甚至能讲出笑话,但一旦问点小学奥数或逻辑问题,就集体…

C# 使用SunnyUI控件 (VS 2019)

前言&#xff1a;建议下载源码&#xff0c;源码中包含了各种控件的用法案例。 下载 帮助文档: 文档预览 - Gitee.comGitee: SunnyUI: SunnyUI.NET 是基于.NET Framework 4.0、.NET8、.NET9 框架的 C# WinForm UI、开源控件库、工具类库、扩展类库、多页面开发框架。GitHub: h…

Spring Cloud: Nacos

Nacos Nacos是阿里巴巴开源的一个服务发现&#xff0c;配置管理和服务管理平台。只要用于分布式系统中的微服务注册&#xff0c;发现和配置管理&#xff0c;nacos是一个注册中心的组件 官方仓库&#xff1a;https://nacos.io/ Nacos的下载 Releases alibaba/nacos 在官网中…

Linux下的c/c++开发之操作mysql数据库

libmysqlclient-dev介绍&#xff08;Linux 下的 Mysql C/C 开发包&#xff09; libmysqlclient-dev 是一个开发包&#xff0c;在Linux环境下为使用 MySQL C API 进行开发的c/c程序员提供头文件&#xff08;如 mysql.h&#xff09;和静态库/动态库的链接信息&#xff08;如 lib…

Java EE(Spring+Spring MVC+MyBatis)从入门到精通企业级应用开发教程——1初识MyBatis框架

1、MyBatis工作原理 MyBatis操作数据库流程分为8个步骤&#xff0c;具体介绍如下&#xff1a; &#xff08;1&#xff09;MyBatis读取核心配置文件mybatis-config.xml mybatis-config.xml核心配置文件主要配置了MyBatis的运行环境等信息。 &#xff08;2&#xff09;加载映射…

【许可证】Open Source Licenses

长期更新 扩展&#xff1a;shield.io装饰 开源许可证&#xff08;Open Source Licenses&#xff09;有很多种&#xff0c;每种都有不同的授权和限制&#xff0c;适用于不同目的。 默认的ISC&#x1f7f0;MIT License是否可商用是否要求开源衍生项目是否必须署名是否有专利授权…

ZooKeeper工作机制与应用场景

目录 1.1、概述1.2、选举机制1.2.1、选举触发条件1.2.2、选举规则1.2.3、选举过程详解 1.3、数据同步机制1.3.1、正常同步1.3.2、宕机同步 1.4、客户端常用命令1.5、应用场景1.5.1、配置管理1.5.2、命令服务1.5.3、分布式锁服务1.5.4、集群管理1.5.5、分布式ID1.5.6、分布式协调…

前端面经-VUE3篇(四)--pinia篇-基本使用、store、state、getter、action、插件

一、基本使用 1、什么是 Pinia&#xff1f; Pinia 是 Vue.js 的官方状态管理库&#xff0c;是 Vuex 的“升级版”。它专为 Vue 3 和 Composition API 设计&#xff0c;用于管理多个组件之间共享的数据&#xff08;也叫“全局状态”&#xff09;。 2、为什么需要状态管理库&a…

数据结构之图的遍历

图的遍历 图的遍历目的是访问图的每一个顶点恰好一次,&#xff0c;同时访问图中每条边恰好一 次。 对于无向图&#xff0c;常见的遍历方式有深度优先遍历&#xff08;Depth-First Search, DFS&#xff09; 和广度优先遍历&#xff08;Breadth-First Search, BFS&#xff09;。…

Ubuntu 第11章 网络管理_常用的网络配置命令

为了管理网络&#xff0c;Linux提供了许多非常有用的网络管理命令。利用这些命令&#xff0c;一方面可以有效地管理网络&#xff0c;另一方面出现网络故障时&#xff0c;可以快速进行诊断。本节将对Ubuntu提供的网络管理命令进行介绍。 11.2.1 ifconfig命令 关于ifconfig命令&…

Qt解决自定义窗口样式不生效问题

方法一&#xff1a; this->setAttribute(Qt::WA_StyledBackground, true); 方法二&#xff1a; 将类继承QWidget 改成继承 QFrame class MyWidget : public QFrame {} 方法三&#xff1a;重新实现QWidget的paintEvent函数时&#xff0c;使用QStylePainter绘制。 void p…