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
英文地址,請注明出處:http://en.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…