STL新增內容

文章目錄

      • C++11 中的 STL 新增內容
        • 容器
        • 算法
      • C++14 中的 STL 新增內容
        • 容器
        • 算法
      • C++17 中的 STL 新增內容
        • 容器
        • 算法
      • C++20 中的 STL 新增內容
        • 容器
        • 算法

C++11 中的 STL 新增內容

容器
  • std::array:這是一個固定大小的數組容器,和原生數組類似,但具備更好的接口與安全性。它在棧上分配內存,大小在編譯時確定。
#include <array>
#include <iostream>
int main() {std::array<int, 5> arr = {1, 2, 3, 4, 5};for (int num : arr) {std::cout << num << " ";}return 0;
}
  • std::unordered_setstd::unordered_map:這兩個容器分別是 std::setstd::map 的無序版本。它們采用哈希表實現,查找、插入和刪除操作的平均時間復雜度為 O ( 1 ) O(1) O(1)
#include <unordered_set>
#include <iostream>
int main() {std::unordered_set<int> us = {1, 2, 3};for (int num : us) {std::cout << num << " ";}return 0;
}
  • std::forward_list:這是一個單向鏈表容器,相比于 std::list(雙向鏈表),它占用的空間更少,插入和刪除操作更快。
算法
  • std::all_ofstd::any_ofstd::none_of:這些算法用于檢查范圍中的元素是否滿足特定條件。
#include <algorithm>
#include <vector>
#include <iostream>
int main() {std::vector<int> vec = {1, 2, 3, 4, 5};bool all_positive = std::all_of(vec.begin(), vec.end(), [](int i) { return i > 0; });std::cout << (all_positive ? "All positive" : "Not all positive") << std::endl;return 0;
}

C++14 中的 STL 新增內容

容器
  • std::make_unique:用于創建 std::unique_ptr 對象,提供了更簡潔的方式來管理動態分配的內存。
#include <memory>
#include <iostream>
class MyClass {
public:MyClass() { std::cout << "Constructed" << std::endl; }~MyClass() { std::cout << "Destroyed" << std::endl; }
};
int main() {auto ptr = std::make_unique<MyClass>();return 0;
}
算法
  • 泛型 lambda 表達式:允許 lambda 表達式的參數使用 auto 類型,增強了 lambda 表達式的通用性。
#include <iostream>
int main() {auto add = [](auto a, auto b) { return a + b; };std::cout << add(1, 2) << std::endl;std::cout << add(1.5, 2.5) << std::endl;return 0;
}

C++17 中的 STL 新增內容

容器
  • std::optional:表示一個可能存在的值,可用于避免返回空指針或錯誤碼。
#include <optional>
#include <iostream>
std::optional<int> divide(int a, int b) {if (b == 0) {return std::nullopt;}return a / b;
}
int main() {auto result = divide(10, 2);if (result) {std::cout << "Result: " << *result << std::endl;} else {std::cout << "Division by zero" << std::endl;}return 0;
}
  • std::variant:可以存儲多種不同類型的值,但同一時間只能存儲其中一種類型。
#include <variant>
#include <iostream>
#include <string>
int main() {std::variant<int, std::string> var = 10;std::cout << std::get<int>(var) << std::endl;var = "Hello";std::cout << std::get<std::string>(var) << std::endl;return 0;
}
  • std::any:可以存儲任意類型的值。
#include <any>
#include <iostream>
#include <string>
int main() {std::any value = 10;std::cout << std::any_cast<int>(value) << std::endl;value = std::string("Hello");std::cout << std::any_cast<std::string>(value) << std::endl;return 0;
}
算法
  • std::clamp:用于將一個值限制在指定的范圍內。
#include <algorithm>
#include <iostream>
int main() {int value = 15;int min = 10;int max = 20;int result = std::clamp(value, min, max);std::cout << "Clamped value: " << result << std::endl;return 0;
}

C++20 中的 STL 新增內容

容器
  • std::span:表示一個連續對象序列的視圖,不擁有這些對象,常用于函數參數傳遞,避免不必要的拷貝。
#include <span>
#include <iostream>
#include <vector>
void print(std::span<int> sp) {for (int num : sp) {std::cout << num << " ";}std::cout << std::endl;
}
int main() {std::vector<int> vec = {1, 2, 3, 4, 5};print(vec);return 0;
}
算法
  • 范圍庫(Ranges Library):提供了一種更簡潔、更通用的方式來處理序列數據,結合了算法和迭代器的功能。
#include <iostream>
#include <vector>
#include <ranges>
int main() {std::vector<int> vec = {1, 2, 3, 4, 5};auto even_numbers = vec | std::views::filter([](int i) { return i % 2 == 0; });for (int num : even_numbers) {std::cout << num << " ";}return 0;
}

這些新增內容使得 STL 更加完善和強大,為 C++ 開發者提供了更多高效、便捷的工具。

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

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

相關文章

C#測試Excel開源組件ExcelDataReader

使用微軟的com組件Microsoft.office.Interop.Excel讀寫Excel文件雖然可用&#xff0c;但是列多、行多的時候速度很慢&#xff0c;之前測試過Sylvan.Data.Excel包的用法&#xff0c;如果只是讀取Excel文件內容的話&#xff0c;還可以使用ExcelDataReader包&#xff0c;后者是C#開…

位置編碼匯總 # 持續更新

看了那么多還沒有講特別好的&#xff0c;GPT老師講的不錯關于三角函數編碼。 一、 手撕transformer常用三角位置編碼 GPT說&#xff1a;“低維度的編碼&#xff08;例如&#xff0c;第一個維度&#xff09;可以捕捉到大的位置差異&#xff0c;而高維度的編碼則可以捕捉到小的細…

Java 模塊系統深度解析

Java 模塊系統深度解析 Java 模塊系統&#xff08;Java Platform Module System, JPMS&#xff09;是 Java 9 引入的一項重要特性&#xff0c;它從根本上改變了 Java 應用程序的打包和依賴管理方式。本文將全面介紹 Java 模塊系統的核心概念、優勢及實際應用。 一、為什么需要…

藍橋杯杯賽-日期模擬

知識點 處理日期 1. 按天枚舉日期&#xff1a;逐天遍歷起始日期到結束日期范圍內的每個日期。 2. 處理閏年&#xff1a;正確判斷閏年條件。閏年定義為&#xff1a;年份 滿足以下任意一個條件&#xff1a;(閏年的2月只有29天) 滿足下面一個條件就是閏年 1> 是 400 的倍數…

.Net中對稱加密的實現

常見對稱加密算法及優缺點 1. DES&#xff08;Data Encryption Standard&#xff09; 優點&#xff1a;是最早被廣泛應用的加密算法&#xff0c;算法公開&#xff0c;實現簡單&#xff0c;效率較高。缺點&#xff1a;密鑰長度較短&#xff08;56 位&#xff09;&#xff0c;在…

SQLMesh調度系統深度解析:內置調度與Airflow集成實踐

本文系統解析SQLMesh的兩種核心調度方案&#xff1a;內置調度器與Apache Airflow集成。通過對比兩者的適用場景、架構設計和操作流程&#xff0c;為企業構建可靠的數據分析流水線提供技術參考。重點內容包括&#xff1a; 內置調度器的輕量級部署與性能優化策略Airflow集成的端到…

centos線程數查看

查看當前最大支持的線程數 cat /proc/sys/kernel/threads-max當前用戶進程可以創建的最大線程數&#xff08;包括子進程&#xff09; [rootlocalhost tmp]# ulimit -u得到當前實際的線程數 [rootlocalhost tmp]# ps -eLf | wc -l統計每個進程的總線程數前20的數據 [rootloc…

【大模型】視覺語言模型:Qwen2.5-VL的使用

官方github地址&#xff1a;https://github.com/QwenLM/Qwen2.5-VL 目錄 Qwen家族的最新成員&#xff1a;Qwen2.5-VL 主要增強功能 模型架構更新 快速開始 使用Transformers聊天 Docker Qwen家族的最新成員&#xff1a;Qwen2.5-VL 主要增強功能 強大的文檔解析功能&am…

HDMI接口設計

1. HDMI簡介 HDMI(High Definition Multimedia Interface)高清多媒體接口,是首個支持在單線纜上傳輸,不經過壓縮的全數字高清晰度、多聲道音頻和智能格式與控制命令數據的數字接口。這個接口可以同時傳輸視頻信號、音頻信號和控制信號。 從上圖里面可以看到HDMI有3組數據信號…

C/C++ JSON 庫綜合對比及應用案例(六)

第六部分&#xff1a;C/C JSON 庫綜合對比及應用案例 &#x1f4e2; 快速掌握 JSON&#xff01;文章 視頻雙管齊下 &#x1f680; 如果你覺得閱讀文章太慢&#xff0c;或者更喜歡 邊看邊學 的方式&#xff0c;不妨直接觀看我錄制的 JSON 課程視頻&#xff01;&#x1f3ac; …

LXC 導入(Rockylinux,almalinux,oraclelunx,debian,ubuntu,openEuler,kail,opensuse)

前提要求 ubuntu下安裝lxd 參考Rockylinux下安裝lxd 參考LXC 源替換參考LXC 容器端口發布參考LXC webui 管理<

Spring MVC 頁面跳轉方案與區別

SpringMVC 的頁面跳轉方案主要分為 ?轉發&#xff08;Forward&#xff09;? 和 ?重定向&#xff08;Redirect&#xff09;? 兩類&#xff0c;具體實現方式和區別如下&#xff1a; 一、頁面跳轉方案 1. ?轉發&#xff08;Forward&#xff09;? 默認方式?&#xff1a;直…

基于Spring Boot的輕型卡車零部件銷售平臺的設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導&#xff0c;歡迎高校老師/同行前輩交流合作?。 技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;…

高性能計算面經

高性能計算面經 C八股文真景一面涼經自我介紹&#xff0c;介紹一下你做過的加速的模塊(疊噪&#xff0c;噪聲跟原圖有什么關系&#xff1f;)OpenGL和OpenCL有什么區別&#xff1f;**1. 核心用途****2. 編程模型****3. 硬件抽象****4. API設計****5. 典型應用場景****6. 互操作性…

青少年編程與數學 02-014 高中數學知識點 07課題、專業相關性分析

青少年編程與數學 02-014 高中數學知識點 07課題、專業相關性分析 一、函數與微積分1. 函數與初等函數2. 導數與優化 二、概率與統計1. 概率基礎2. 統計推斷3. 隨機變量與分布 三、幾何與代數1. 向量與矩陣運算2. 復數與坐標變換 四、數學建模與算法思維1. 數學建模2. 算法邏輯…

11亂碼問題的解釋(2)

這個字符串使用哪種方式編碼的?---看包含在哪個文件中 和當前 mylabel.cpp 文件的編碼方式是一致的~~ 如果這里顯示的是 UTF-8&#xff0c;說明這個文件就是UTF-8 編碼 如果顯示的是 ANSI,說明這個文件就是 GBK 編碼~ Qt Creator 內置的終端是 utf8 的方式來顯示字符串嗎?? …

我的機器學習學習之路

學習python的初衷 ? hi&#xff0c;今天給朋友們分享一下我是怎么從0基礎開始學習機器學習的。 ? 我是2023年9月開始下定決心要學python的&#xff0c;目的有兩個&#xff0c;一是為了提升自己的技能和價值&#xff0c;二是將所學的知識應用到工作中去&#xff0c;提升工作…

27--當路由器學會“防狼術“:華為設備管理面安全深度解剖(完整戰備版)

當路由器學會"防狼術"&#xff1a;華為設備管理面安全深度解剖&#xff08;完整戰備版&#xff09; 引言&#xff1a;網絡世界的"門神"進化論 “從前有個路由器&#xff0c;它把所有數據包都當好人&#xff0c;直到有一天…” ——《悲慘世界網絡版》 如果…

Docker容器網絡相關設置

確認容器是否正確啟動 首先&#xff0c;確保 MySQL 容器正在運行。可以使用 docker ps 查看當前正在運行的容器。如果 MySQL 容器沒有啟動&#xff0c;可以嘗試以下命令啟動它&#xff1a; docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORDrootpassword mysql:8 這…

hive相關面試題以及答案

什么是Hive&#xff1f;它的作用是什么&#xff1f; 答&#xff1a;Hive是一個建立在Hadoop之上的數據倉庫工具&#xff0c;它提供了類似于SQL的查詢語言HiveQL來操作存儲在Hadoop中的數據。Hive的主要作用是讓用戶能夠使用SQL語法來查詢和分析大規模數據集。 Hive的架構是什么…