C++學習筆記(三十八)——STL之修改算法

STL 算法分類:

類別常見算法作用
排序sortstable_sortpartial_sortnth_element排序
搜索findfind_ifcountcount_ifbinary_search查找元素
修改copyreplacereplace_ifswapfill修改容器內容
刪除removeremove_ifunique刪除元素
歸約for_eachaccumulate處理數據
合并mergeset_unionset_intersection處理有序序列
排列組合next_permutationprev_permutation生成排列
堆操作push_heappop_heapmake_heapsort_heap處理堆

STL 修改算法

在 C++ 標準庫(STL)中,修改算法可以在容器中應用特定的操作,如修改元素的值、替換值、插入新元素等。
修改算法通常返回容器的迭代器,指示修改的位置或結果。

算法名稱功能描述時間復雜度空間復雜度適用場景
fill用指定的值填充容器中的所有元素O(n)O(1)填充容器的所有元素
fill_n用指定的值填充容器中的部分元素O(n)O(1)填充容器的部分元素
copy將一個范圍內的元素復制到另一個范圍中O(n)O(1)將容器中的元素復制到另一個容器
swap交換兩個元素的值O(1)O(1)交換兩個元素或兩個容器的內容
replace替換容器中所有指定值的元素O(n)O(1)替換容器中的指定值
replace_if替換容器中所有滿足條件的元素O(n)O(1)根據條件替換容器中的元素
transform對容器中每個元素應用操作并存儲結果O(n)O(1)對容器中每個元素進行變換
rotate將給定范圍內的元素旋轉指定次數O(n)O(1)容器中元素的旋轉操作

(1)fill

  • 功能:用指定的值填充容器中的所有元素。
  • 時間復雜度O(n),其中 n 是容器的元素數量。
  • 空間復雜度O(1),原地操作。

示例:

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>int main() {vector<int> vec(5, 0);  // 初始化為5個0fill(vec.begin(), vec.end(), 10);  // 將所有元素修改為10for (int x : vec){cout << x << " ";  // 輸出:10 10 10 10 10}cout << endl;system("pause");return 0;
}

注意:

  • fill適用于,當需要用相同的值填充整個容器時。

(2)fill_n

  • 功能:從指定位置開始填充指定數量的元素為給定值。
  • 時間復雜度O(n),其中 n 是填充的元素數量。
  • 空間復雜度O(1),原地操作。

示例:

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>int main() {vector<int> vec(5, 0);fill_n(vec.begin(), 3, 10);  // 將前3個元素填充為10for (int x : vec){cout << x << " ";  // 輸出:10 10 10 0 0}cout << endl;system("pause");return 0;
}

注意:

  • fill_n適用于,當需要填充容器的部分元素時。

(3)copy

  • 功能:將一個范圍內的元素復制到另一個范圍中。
  • 時間復雜度O(n),其中 n 是源范圍中的元素數量。
  • 空間復雜度O(1),原地操作。

示例:

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>int main() {vector<int> src = { 1, 2, 3, 4, 5 };vector<int> dest(5);// 將 src 中的元素復制到 dest 中copy(src.begin(), src.end(), dest.begin());cout << "復制的vector: ";for (int val : dest) {cout << val << " ";}cout << endl;system("pause");return 0;
}

注意:

  • copy用于將一個容器中的元素復制到另一個容器,或從一個容器復制到數組等。

(4)swap

  • 功能:交換兩個變量或容器中的元素。
  • 時間復雜度O(1),它直接交換兩個元素,不涉及其他復雜操作。
  • 空間復雜度O(1),原地操作。

示例:

#include <iostream>
using namespace std;
#include <algorithm>int main() {int a = 5, b = 10;// 交換 a 和 b 的值swap(a, b);cout << "a = " << a << ", b = " << b << endl;system("pause");return 0;
}

注意:

  • swap適用于,當需要交換兩個元素或兩個容器的內容時。

(5)replace

  • 功能:將容器中所有等于指定值的元素替換為新值。
  • 時間復雜度O(n),其中 n 是容器的元素數量。
  • 空間復雜度O(1),原地操作。

示例:

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>int main() {vector<int> vec = { 1, 2, 3, 2, 5 };replace(vec.begin(), vec.end(), 2, 10);  // 將所有2替換為10for (int x : vec){cout << x << " ";  // 輸出:1 10 3 10 5}cout << endl;system("pause");return 0;
}

注意:

  • replace適用于,當需要將容器中的指定值替換為其他值時。

(6)replace_if

  • 功能:將容器中所有滿足條件的元素替換為新值。
  • 時間復雜度O(n),其中 n 是容器的元素數量。
  • 空間復雜度O(1),原地操作。

示例:

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>bool is_odd(int n)
{return n % 2 != 0;
}int main() {vector<int> vec = { 1, 2, 3, 4, 5 };replace_if(vec.begin(), vec.end(), is_odd, 10);  // 將所有奇數替換為10for (int x : vec){cout << x << " ";  // 輸出:10 2 10 4 10}cout << endl;system("pause");return 0;
}

注意:

  • replace_if適用于,當需要根據某種條件替換容器中元素時。

(7)transform

  • 功能:對容器中的每個元素應用指定的操作,并將結果存儲到目標容器中。
  • 時間復雜度O(n),其中 n 是容器的元素數量。
  • 空間復雜度O(1)

示例:

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>int square(int n)
{return n * n;
}int main() {vector<int> vec = { 1, 2, 3, 4, 5 };vector<int> result(vec.size());transform(vec.begin(), vec.end(), result.begin(), square);for (int x : result){cout << x << " ";  // 輸出:1 4 9 16 25}cout << endl;system("pause");return 0;
}

注意:

  • transform適用于,當需要對容器中的每個元素進行某些變換時。

(8)rotate

  • 功能:將范圍內的元素旋轉指定次數(左旋/循環左移)。
  • 時間復雜度O(n),其中 n 是范圍中的元素數量。
  • 空間復雜度O(1),原地操作。

示例:

#include <iostream>
#include <algorithm>  // std::rotate
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 將 vec 中的元素旋轉 2 次std::rotate(vec.begin(), vec.begin() + 2, vec.end());std::cout << "Rotated vector: ";for (int val : vec) {std::cout << val << " ";}std::cout << std::endl;return 0;
}

注意:

  • rotate適用于,當需要將容器中的元素旋轉時。

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

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

相關文章

Crawl4AI 部署安裝及 n8n 調用,實現自動化工作流(保證好使)

Crawl4AI 部署安裝及 n8n 調用&#xff0c;實現自動化工作流&#xff08;保證好使&#xff09; 簡介 Crawl4AI 的介紹 一、Crawl4AI 的核心功能 二、Crawl4AI vs Firecrawl Crawl4AI 的本地部署 一、前期準備 二、部署步驟 1、檢查系統的網絡環境 2、下載 Crawl4AI 源…

32單片機——外部中斷

STM32F103ZET6的系統中斷有10個&#xff0c;外部中斷有60個 1、中斷的概念 中斷是為使單片機具有對外部或內部隨機發生的事件實時處理而設置的&#xff0c;中斷功能的存在&#xff0c;很大程度上提高了單片機處理外部或內部事件的能力 eg&#xff1a;&#xff1a;你打開火&…

UG NX二次開發(C#)-獲取具有相同屬性名稱的體對象

文章目錄 1、前言2、在UG NX中的屬性的賦予3、通過UG NX二次開發獲取相同屬性的體對象1、前言 UG NX中每個對象都可以屬于屬性的,包括體、面、邊、特征、基準等。在QQ群中有個群有提出一個問題,就是獲取相同屬性的體對象,然后將這個體對象導出到一個part文件中。我們今天先…

手動實現legend 與 echarts圖交互 通過元素和js事件實現圖標某項的高亮 顯示與隱藏

通過html實現legend的樣式 提供調用echarts的api實現與echarts圖表交互的效果 實現餅圖element實現類似于legend與echartstu表交互效果 效果圖 配置代碼 <template><div style"height: 400px; width: 500px;background-color: #CCC;"><v-chart:opti…

SpringBoot與BookKeeper整合,實現金融級別的日志存儲系統

BookKeeper的優勢 高吞吐量和低延遲 分布式架構: Apache BookKeeper采用分布式的架構設計&#xff0c;能夠支持高并發的寫入和讀取操作。 批量寫入: 支持批量寫入日志條目&#xff0c;顯著提高寫入效率。 異步I/O: 使用異步I/O操作&#xff0c;減少等待時間&#xff0c;提升…

【Bug】 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

當你在進行深度學習相關操作時&#xff0c;若因缺少本地的 CA 證書而無法下載資源&#xff0c;下面為你介紹幾種解決辦法&#xff1a; 方法一&#xff1a;更新 CA 證書 在大多數 Linux 發行版中&#xff0c;你可以使用包管理器來更新 CA 證書。例如&#xff0c;在基于 Debian…

Vue3中AbortController取消請求的用法詳解

在 Vue3 中&#xff0c;AbortController 用于取消 fetch 請求&#xff0c;避免組件卸載后仍執行異步操作導致的潛在問題&#xff08;如內存泄漏或更新已銷毀組件的狀態&#xff09;。以下是詳細用法和最佳實踐&#xff1a; 一、基本用法 創建 AbortController 實例 在組件 setu…

【刷題Day26】Linux命令、分段分頁和中斷(淺)

說下你常用的 Linux 命令&#xff1f; 文件與目錄操作&#xff1a; ls&#xff1a;列出當前目錄的文件和子目錄&#xff0c;常用參數如-l&#xff08;詳細信息&#xff09;、-a&#xff08;包括隱藏文件&#xff09;cd&#xff1a;切換目錄&#xff0c;用于在文件系統中導航m…

Spring Boot 參考文檔導航手冊

&#x1f4da; Spring Boot 參考文檔導航手冊 &#x1f5fa;? ? 新手入門 &#x1f476; 1?? &#x1f4d6; 基礎入門&#xff1a;概述文檔 | 環境要求 | 安裝指南 2?? &#x1f527; 實操教程&#xff1a;上篇 | 下篇 3?? &#x1f680; 示例運行&#xff1a;基礎篇 …

卷積神經網絡(CNN)詳細教程

卷積神經網絡&#xff08;CNN&#xff09;詳細教程 一、引言 卷積神經網絡&#xff08;Convolutional Neural Networks, CNN&#xff09;是一種深度學習模型&#xff0c;廣泛應用于圖像識別、視頻分析、自然語言處理等領域。CNN通過模擬人類視覺系統的層次結構&#xff0c;能夠…

解決SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption faile的問題

問題描述&#xff1a; 在pip安裝第三方庫時&#xff0c;出現SSL的問題。 傳輸層安全性協議&#xff08;TLS&#xff09;及其前身安全套接層&#xff08;SSL&#xff09;是現在的 HTTPS 協議中的一種安全協議&#xff0c;目的是為互聯網通信提供安全及數據完整性保障。而較新版…

SpringBoot程序的創建以及特點,配置文件,LogBack記錄日志,配置過濾器、攔截器、全局異常

目錄 一、創建一個SpringBoot程序 二、SpringBoot的特點 ①主要特點 ②其他特點 ③熱部署 啟動熱部署 關閉熱部署 三、SpringBoot的配置文件 ①SpringBoot三種配置文件的格式&#xff08;以設置端口號為例&#xff09;&#xff1a; ②配置文件的優先級 ③常見配置項 1…

i18n-ai-translate開源程序,可以使用DeepSeek等模型將您的 i18nJSON翻譯成任何語言

一、軟件介紹 文末提供程序和源碼下載 i18n-ai-translate開源程序使用 DeepSeek等模型可以將您的 i18n JSON 翻譯成任何語言。 無縫翻譯本地化文件。支持嵌套翻譯文件的目錄。需要i18next樣式的JSON 文件&#xff08;文末一并提供下載&#xff09;。 二、模式 CSV 模式 三個…

Flask + ajax上傳文件(一)--單文件上傳

一、概述 本教程將教你如何使用Flask后端和AJAX前端實現文件上傳功能,包含完整的代碼實現和詳細解釋。 二、環境準備 1. 所需工具和庫 Python 3.xFlask框架jQuery庫Bootstrap(可選,用于美化界面)2. 安裝Flask pip install flask三、項目結構 upload_project/ ├── a…

如何在 Postman 中,自動獲取 Token 并將其賦值到環境變量

在 Postman 中&#xff0c;你可以通過 預請求腳本&#xff08;Pre-request Script&#xff09; 和 測試腳本&#xff08;Tests&#xff09; 實現自動獲取 Token 并將其賦值到環境變量&#xff0c;下面是完整的操作步驟&#xff1a; ? 一、創建獲取 Token 的請求 通常這個請求…

北斗導航 | 基于Transformer+LSTM+激光雷達的接收機自主完好性監測算法研究

基于Transformer+LSTM+激光雷達的接收機自主完好性監測算法研究 接收機自主完好性監測(RAIM)是保障全球導航衛星系統(GNSS)定位可靠性的核心技術。傳統RAIM算法依賴最小二乘殘差法,存在故障漏檢、對復雜環境適應性差等問題。結合Transformer、LSTM與激光雷達的多模態融合…

基于Python爬蟲的豆瓣電影信息爬取(可以根據選擇電影編號得到需要的電影信息)

# 豆瓣電影信息爬蟲(展示效果如下圖所示:) 這是一個功能強大的豆瓣電影信息爬蟲程序,可以獲取豆瓣電影 Top 250 的詳細信息。 ## 功能特點 - 自動爬取豆瓣電影 Top 250 的所有電影信息 - 支持分頁獲取,每頁 25 部電影,共 10 頁 - 獲取每部電影的詳細信息,包括: - 標題…

Ubuntu22.04/24.04 P104-100 安裝驅動和 CUDA Toolkit

硬件環境 使用一塊技嘉 B85m-DS3H 安裝 P104-100, CPU是帶集成顯卡的i5-4690. 先在BIOS中設置好顯示設備優先使用集成顯卡(IGX). 然后安裝P104-100開機. 登入Ubuntu 后查看硬件信息, 檢查P104-100是否已經被檢測到 # PCI設備 lspci -v | grep -i nvidia lspci | grep NVIDIA …

東南亞與中東小游戲市場出海調研報告

東南亞與中東小游戲市場出海調研報告 目標市場篩選與概況 (The Gaming Market in Southeast Asia (SEA) | Allcorrect)圖:2018–2027年東南亞主要國家游戲市場收入(億美元)趨勢。到2024年東南亞游戲市場規模預計將接近300億美元 (2024年東南亞手游市場怎么樣? - 快出海問…

力扣4-最長公共前綴

一.題目 編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴&#xff0c;返回空字符串 ""。 示例 1&#xff1a; 輸入&#xff1a;strs ["flower","flow","flight"] 輸出&#xff1a;"fl"示例 2&…