C++標準庫(std)詳解

C++標準庫(std)詳解——目錄

  • C++標準庫(`std`)詳解
    • 一、命名空間(`namespace`)
    • 二、主要組件
      • 1. 輸入輸出流(`<iostream>`)
      • 2. 字符串處理(`<string>`)
      • 3. STL容器(`<vector>`,` <list>`,` <map>`, `<set>`等)
      • 4. 算法(`<algorithm>`)
      • 5. 數值處理(`<numeric>`)
      • 6. 函數對象與可調用對象(`<functional>`)
      • 7. 異常處理(`<exception>`)
      • 8. 時間日期(`<chrono>`)
      • 9. 文件系統(`<filesystem>`)
      • 10. 線程支持(`<thread>`,` <mutex>`,` <condition_variable>`等)
      • 11. 正則表達式(`<regex>`)

C++標準庫(std)詳解

C++是一種功能強大的編程語言,其標準庫(std)提供了豐富的功能和工具,幫助開發者高效地進行編程。本文將詳細介紹C++標準庫的主要組成部分及其使用方法。

一、命名空間(namespace

在C++中,標準庫的所有內容都定義在std命名空間中。這是為了避免與用戶自定義的函數或類名發生沖突。使用std命名空間有兩種主要方式:

  • 顯式指定:每次使用標準庫中的函數或類時,都加上std::前綴,例如std::coutstd::vector
  • 使用聲明:通過using關鍵字引入特定的名稱,例如using std::cout;,這樣在當前作用域內就可以直接使用cout而無需加std::前綴。

二、主要組件

1. 輸入輸出流(<iostream>

<iostream>頭文件提供了用于控制臺輸入輸出的功能,主要包括:

  • std::cin:標準輸入流,通常用于從鍵盤讀取輸入。
  • std::cout:標準輸出流,用于向控制臺輸出信息。
  • std::cerr:標準錯誤流,用于輸出錯誤信息,通常不帶緩沖。
  • std::clog:標準日志流,用于輸出日志信息,通常帶緩沖。

示例代碼:

#include <iostream>int main() {std::cout << "Hello, World!" << std::endl;int a;std::cin >> a;std::cout << "You entered: " << a << std::endl;return 0;
}

2. 字符串處理(<string>

<string>頭文件提供了std::string類,用于處理字符串。常用操作包括:

  • std::string:表示字符串對象。
  • std::getline:從輸入流中讀取一行字符串。
  • str.size():返回字符串的長度。
  • str.substr(pos, len):獲取子字符串。
  • str1 + str2:字符串拼接。

示例代碼:

#include <iostream>
#include <string>int main() {std::string str1 = "Hello";std::string str2 = "World";std::string result = str1 + ", " + str2 + "!";std::cout << result << std::endl;return 0;
}

3. STL容器(<vector>, <list>, <map>, <set>等)

C++標準庫提供了多種容器類,用于存儲和管理數據。常見的容器包括:

  • std::vector:動態數組,支持隨機訪問。
  • std::list:雙向鏈表,支持快速插入和刪除。
  • std::map:關聯容器,存儲鍵值對,按鍵排序。
  • std::set:集合容器,存儲唯一元素,自動排序。

示例代碼(使用std::vector):

#include <iostream>
#include <vector>int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};for (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

4. 算法(<algorithm>

<algorithm>頭文件提供了許多通用算法,可以應用于各種容器。常用算法包括:

  • std::sort:對容器中的元素進行排序。
  • std::find:查找容器中的某個元素。
  • std::count:統計容器中滿足條件的元素個數。
  • std::copy:將一個容器的元素復制到另一個容器。

示例代碼:

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> numbers = {5, 3, 1, 4, 2};std::sort(numbers.begin(), numbers.end());for (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

5. 數值處理(<numeric>

<numeric>頭文件提供了一些數學運算相關的函數,例如:

  • std::accumulate:計算容器中元素的累加和。
  • std::inner_product:計算兩個容器的內積。

示例代碼:

#include <iostream>
#include <vector>
#include <numeric>int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};int sum = std::accumulate(numbers.begin(), numbers.end(), 0);std::cout << "Sum: " << sum << std::endl;return 0;
}

6. 函數對象與可調用對象(<functional>

<functional>頭文件提供了函數對象和可調用對象的包裝器,例如:

  • std::function:通用的可調用對象包裝器,可以存儲任何可調用對象(如函數、Lambda表達式、函數對象)。
  • std::bind:綁定函數參數,生成新的可調用對象。

示例代碼:

#include <iostream>
#include <functional>void printSquare(int x) {std::cout << x * x << std::endl;
}int main() {std::function<void(int)> func = printSquare;func(5); // 輸出 25return 0;
}

7. 異常處理(<exception>

<exception>頭文件提供了標準異常類,用于處理程序中的異常情況。常見的異常類包括:

  • std::exception:基類,提供what()方法返回異常描述。
  • std::runtime_error:運行時錯誤異常。
  • std::logic_error:邏輯錯誤異常。

示例代碼:

#include <iostream>
#include <exception>int main() {try {throw std::runtime_error("An error occurred");} catch (const std::exception& e) {std::cout << "Caught exception: " << e.what() << std::endl;}return 0;
}

8. 時間日期(<chrono>

<chrono>頭文件提供了處理時間和日期的功能,例如:

  • std::chrono::system_clock:系統時鐘,用于獲取當前時間。
  • std::chrono::duration:表示時間段。
  • std::chrono::time_point:表示時間點。

示例代碼:

#include <iostream>
#include <chrono>
#include <thread>int main() {auto now = std::chrono::system_clock::now();std::cout << "Current time: " << std::chrono::system_clock::to_time_t(now) << std::endl;std::this_thread::sleep_for(std::chrono::seconds(1));return 0;
}

9. 文件系統(<filesystem>

<filesystem>頭文件提供了操作文件系統的功能,例如:

  • std::filesystem::path:表示文件路徑。
  • std::filesystem::exists:檢查文件是否存在。
  • std::filesystem::create_directory:創建目錄。
  • std::filesystem::remove:刪除文件或目錄。

示例代碼:

#include <iostream>
#include <filesystem>namespace fs = std::filesystem;int main() {fs::path p = "example.txt";if (fs::exists(p)) {std::cout << p << " exists" << std::endl;} else {std::cout << p << " does not exist" << std::endl;}return 0;
}

10. 線程支持(<thread>, <mutex>, <condition_variable>等)

C++11引入了多線程支持,相關頭文件包括:

  • std::thread:表示線程對象。
  • std::mutex:互斥鎖,用于保護共享數據。
  • std::condition_variable:條件變量,用于線程間同步。

示例代碼:

#include <iostream>
#include <thread>
#include <mutex>std::mutex mtx;void printMessage(const std::string& message) {std::lock_guard<std::mutex> lock(mtx);std::cout << message << std::endl;
}int main() {std::thread t1(printMessage, "Hello from thread 1");std::thread t2(printMessage, "Hello from thread 2");t1.join();t2.join();return 0;
}

11. 正則表達式(<regex>

<regex>頭文件提供了正則表達式相關的類和函數,用于字符串的模式匹配和搜索。常用功能包括:

  • std::regex:表示正則表達式對象。
  • std::regex_match:檢查整個字符串是否匹配正則表達式。
  • std::regex_search:搜索字符串中與正則表達式匹配的部分。
  • std::regex_replace:替換字符串中與正則表達式匹配的部分。

示例代碼:

#include <iostream>
#include <regex>
#include <string>int main() {std::string text = "Hello, World!";std::regex pattern("\\bWorld\\b"); // 匹配單詞 "World"if (std::regex_search(text, pattern)) {std::cout << "Match found!" << std::endl;} else {std::cout << "No match found." << std::endl;}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914940.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914940.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914940.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ESP32的OTA升級詳解:3. 搭建node/python服務器升級(native ota原生API)

一、OTA兩種方式&#xff1a;app_update 與 esp_https_ota 區別 ESP32/ESP32-S2/ESP32-C3等可通過Wi-Fi或以太網下載新固件到OTA分區實現運行時升級。ESP-IDF提供兩種OTA升級方法&#xff1a; 使用app_update組件的原生API使用esp_https_ota組件的簡化API(支持HTTPS升級) 本次…

byte[]作為接口參數傳遞的方法

在C#中通過WebService或API傳遞byte參數&#xff08;如文件、圖像等二進制數據&#xff09;時&#xff0c;通常有以下幾種實現方式&#xff1a; ?1. 使用Base64編碼&#xff08;推薦REST API&#xff09;? 將byte數組轉換為Base64字符串傳輸&#xff0c;適用于JSON格式的API&…

元宇宙與Web3的深度融合:構建沉浸式數字體驗的愿景與挑戰

一、技術特征與融合基礎1. 元宇宙的技術架構&#xff08;2025年&#xff09;空間構建技術&#xff1a;3D建模與渲染&#xff1a;實時渲染引擎&#xff08;如Unity HDRP&#xff09;支持路徑追蹤光追&#xff0c;AI生成模型&#xff08;NVIDIA Get3D&#xff09;3秒生成3D場景。…

什么是腦裂

腦裂定義&#xff1a; 腦裂是分布式系統中由于網絡分區&#xff08;Network Partition&#xff09;導致集群節點被分割成多個獨立子集&#xff0c;每個子集認為自己是唯一合法的集群&#xff0c;從而導致數據不一致或系統行為異常的現象。詳細工作原理&#xff1a;發生原因&…

川翔云電腦:云端算力新標桿,創作自由無邊界

一、旗艦機型&#xff1a;4090Ultra 48G 顯存顛覆硬件限制 川翔云電腦最新上線的RTX 4090Ultra 48G 顯存機型&#xff0c;采用 NVIDIA Ada Lovelace 架構&#xff0c;單卡顯存容量達 48GB GDDR6X&#xff0c;較傳統 4090 翻倍&#xff0c;可直接加載 1200 萬面數的超復雜模型&a…

貪心算法(排序)

碼蹄集OJ-活動安排 #include<bits/stdc.h> using namespace std; struct MOOE {int s,e; }; bool compare(const MOOE&a,const MOOE&b) {return a.e<b.e; } int main( ) {int n;cin>>n;vector<MOOE>a(n);for(int i0;i<n;i){cin>>a[i].…

詳解序數回歸損失函數ordinal_regression_loss:原理與實現

在醫療 AI 領域&#xff0c;很多分類任務具有有序類別的特性&#xff0c;如疾病嚴重程度&#xff08;輕度→中度→重度&#xff09;、腫瘤分級&#xff08;G1→G2→G3&#xff09;等。這類任務被稱為序數回歸&#xff08;Ordinal Regression&#xff09;&#xff0c;需要特殊的…

SQL增查

建完庫與建完表后后:1.分別查詢student表和score表的所有記錄student表&#xff1a;score表:2.查詢student表的第2條到5條記錄SELECT * FROM student LIMIT 1,4;3.從student表中查詢計算機系和英語系的學生的信息SELECT * FROM student-> WHERE department IN (計算機系, 英…

二分答案之最大化最小值

參考資料來源靈神在力扣所發的題單&#xff0c;僅供分享學習筆記和記錄&#xff0c;無商業用途。 核心思路&#xff1a;本質上是求最大 應用場景&#xff1a;在滿足條件的最小值區間內使最大化 檢查函數&#xff1a;保證數據都要大于等于答案 補充&#xff1a;為什么需要滿…

OCR 賦能檔案數字化:讓沉睡的檔案 “活” 起來

添加圖片注釋&#xff0c;不超過 140 字&#xff08;可選&#xff09;企業產品檔案包含設計圖紙、檢測報告、生產記錄等&#xff0c;傳統數字化僅靠掃描存檔&#xff0c;后續檢索需人工逐份翻閱&#xff0c;效率極低。?OCR 產品檔案解決方案直擊痛點&#xff1a;通過智能識別技…

力扣118.楊輝三角

思路1.新建一個vector的vector2.先把空間開出來&#xff0c;然后再把里面的值給一個個修改開空間的手段&#xff1a;new、構造函數、reserve、resize因為我們之后要修改里面的數據&#xff0c;這就意味著我們需要去讀取這個數據并修改&#xff0c;如果用reserve的話&#xff0c…

Python 網絡爬蟲 —— 提交信息到網頁

一、模塊核心邏輯“提交信息到網頁” 是網絡交互關鍵環節&#xff0c;借助 requests 庫的 post() 函數&#xff0c;能模擬瀏覽器向網頁發數據&#xff08;如表單、文件 &#xff09;&#xff0c;實現信息上傳&#xff0c;讓我們能與網頁背后的服務器 “溝通”&#xff0c;像改密…

SpringMVC4

一、SpringMVC 注解與項目開發流程1.1注解的生命周期- Target、Retention 等元注解&#xff1a;- Target(ElementType.TYPE) &#xff1a;說明這個注解只能用在類、接口上。- Retention(RetentionPolicy.RUNTIME) &#xff1a;說明注解在運行時保留&#xff0c;能通過反射獲取…

數據結構排序算法總結(C語言實現)

以下是常見排序算法的總結及C語言實現&#xff0c;包含時間復雜度、空間復雜度和穩定性分析&#xff1a;1. 冒泡排序 (Bubble Sort)思想&#xff1a;重復比較相鄰元素&#xff0c;將較大元素向后移動。 時間復雜度&#xff1a;O(n)&#xff08;最好O(n)&#xff0c;最壞O(n)) 空…

嵌入式學習-PyTorch(2)-day19

很久沒有學了&#xff0c;期間打點滴打了一個多星期&#xff0c;太累了&#xff0c;再加上學了一下Python語法基礎&#xff0c;再終于開始重新學習pytorchtensorboard 的使用import torch from torch.utils.tensorboard import SummaryWriter writer SummaryWriter("logs…

Prompt Engineering 快速入門+實戰案例

資料來源&#xff1a;火山引擎-開發者社區 引言 什么是 prompt A prompt is an input to a Generative AI model, that is used to guide its output. Prompt engineering is the process of writing effective instructions for a model, such that it consistently generat…

「源力覺醒 創作者計劃」_文心開源模型(ERNIE-4.5-VL-28B-A3B-PT)使用心得

文章目錄背景操作流程開源模型選擇算力服務器平臺開通部署一個算力服務器登錄GPU算力服務器進行模型的部署FastDeploy 快速部署服務安裝paddlepaddle-gpu1. 降級沖突的庫版本安裝fastdeploy直接部署模型&#xff08;此處大約花費15分鐘時間&#xff09;放行服務端口供公網訪問最…

P10719 [GESP202406 五級] 黑白格

題目傳送門 前言&#xff1a;不是這樣例有點過分了哈&#xff1a; 這是我沒考慮到無解的情況的得分&#xff1a; 這是我考慮了的得分&#xff1a; 總而言之&#xff0c;就是一個Subtask 你沒考慮無解的情況&#xff08;除了Subtask #0&#xff09;,就會WA一大片,然后這個Subt…

AWS RDS PostgreSQL可觀測性最佳實踐

AWS RDS PostgreSQL 介紹AWS RDS PostgreSQL 是亞馬遜云服務&#xff08;AWS&#xff09;提供的托管型 PostgreSQL 數據庫服務。托管服務&#xff1a;AWS 管理數據庫的底層基礎設施&#xff0c;包括硬件、操作系統、數據庫引擎等&#xff0c;用戶無需自行維護。高性能&#xff…

C++——set,map的模擬實現

文章目錄前言紅黑樹的改變set的模擬實現基本框架迭代器插入源碼map模擬實現基礎框架迭代器插入賦值重載源碼測試代碼前言 set&#xff0c;map底層使用紅黑樹這種平衡二叉搜索樹來組織元素 &#xff0c;這使得set, map能夠提供對數時間復雜度的查找、插入和刪除操作。 下面都是基…