1-2算法基礎-常用庫函數

1.排序
sort(first,last,cmp)
first指向要排序范圍的第一個元素,從0起
last指向要排序范圍的最后一個元素的下一個位置
cmp(可選),自定義函數,默認從小到大

在這里插入圖片描述
評測系統

#include <iostream>
#include<algorithm> 
using namespace std;
bool cmp(int a, int b) {return a > b;//定義從大到小排序
}
int main()
{int n;cin >> n;long long int a[500005];for (int i = 0; i < n; i++) {cin >> a[i];}sort(a, a + n);//從小到大for (int i = 0; i < n; i++) {cout<< a[i]<<" ";}cout << endl;sort(a, a + n,cmp);//定義比較函數for (int i = 0; i < n; i++) {cout << a[i] << " ";}return 0;
}

2.最值查找
min和max只能傳入兩個值或一個列表
min(3,5)=3
min({1,2,3,4})=1
min_element(st,ed)
st到end(不含)中最小那個值的地址

[例]成績分析
在這里插入圖片描述
在這里插入圖片描述

評測系統

#include <iostream>
#include <algorithm>
#include <numeric>
#include <iomanip>
using namespace std;
int main()
{int n;cin >> n;int a[10005];for (int i = 0; i < n; i++) {cin >> a[i];}int* x = max_element(a, a + n);  //#include <algorithm>cout << *x<<endl;x = min_element(a, a + n);  //#include <algorithm>cout << *x<<endl;double sum = accumulate(a, a + n, 0);  //#include <numeric>cout << fixed << setprecision(2) << 1.0*sum / n;  //#include<iomanip>,*1.0確保是小數,這樣才能確保精度return 0;
}

3.二分查找
二分查找的庫函數只能處理數字式單調不減/單調不增的

(1)binary_search
頭文件#include <algorithm>
返回bool類型

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{int a[] = { 1,4,6,8,9 };//查找6,返回bool類型,成功1,失敗0cout << binary_search(a, a + 5, 6); // # include <algorithm>
}

(2)lower_bound
復雜度O(log n)
適用于單調不減的數組

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{int a[] = { 1,4,6,6,9 };//返回第一個大于等于6的地址cout<<lower_bound(a, a + 5, 6);// 000000DB0954F9C0//減去首地址,返回的是索引下標,即6第一次出現的位置cout << lower_bound(a, a + 5, 6)-a;// 2
}

(3)upper_bound
適用于單調不減的數組

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{int a[] = { 1,4,6,6,9 };//返回第一個大于6的地址cout<<upper_bound(a, a + 5, 6);// 000000010134FC58//減去首地址,返回的是索引下標cout << upper_bound(a, a + 5, 6)-a;// 4
}

[例] 二分查找數組元素,要求復雜度小于O(n)

在這里插入圖片描述
在這里插入圖片描述
解:數組中沒有相同元素,且是單調遞增的

#include <iostream>
using namespace std;
int main()
{int data[200];for (int i = 0; i < 200; i ++){data[i] = 4 * i + 6;}int  n;cin >> n;cout<<lower_bound(data, data + 200, n)-data;//lower_bound得到的是地址,減去首地址data即為下標return 0;
}

4.大小寫轉換

#include <iostream>
using namespace std;
int main()
{char a = 'A';if (isupper(a)) {//isupper判斷是否是大寫字母,bool類型cout << tolower(a);//轉為小寫,ASCII類型。輸出:97cout << char(tolower(a));//ASCII轉字符。輸出:a}
}

對應的
判斷是否小寫(bool):islower
轉小寫(ASCII):tolower

當前,也可以用ASCII直接轉換,
a 97
A 65
相差32

#include <iostream>
using namespace std;
int main()
{char s = 'A';cout << char(s + 32);// a
}

5.全排列(排列組合)
只能處理初始有序的序列
(1)next_permutation
若初始是abc(這是最小的序列組合(在字符串比較中))
大一點acb
再大bac
再大bca
再大cab
最大cba

#include <iostream>
#include <algorithm>
using namespace std;
int main() {int a[3] = { 2, 5, 7 };do {for (int i = 0; i < 3; i++) {cout << a[i];}cout << endl;} while (next_permutation(a, a + 3));return 0;
}

輸出:
257
275
527
572
725
752

(2)prev_permutation
由大到小輸出,初始序列應為降序

#include <iostream>
#include <algorithm>
using namespace std;int main() {int a[3] = { 7, 5, 2 };do {for (int i = 0; i < 3; i++) {cout << a[i];}cout << endl;} while (prev_permutation(a, a + 3));return 0;
}

輸出:
752
725
572
527
275
257

6.其他庫函數

(1)memset
用于將一塊內存區域的每個字節都設置為特定的值,通常用于初始化內存塊
頭文件#include <cstring>

只能設置成0或-1

int a[3] = { 7,6,4 };
memset(a, 0, sizeof(a));//對a數組每個元素初始化0

(2)swap
交換兩個變量的值,變量值發生了改變

#include <iostream>
using namespace std;
int main() {int a = 1;int b = 2;swap(a, b);cout << a; //2return 0;
}

(3)reverse
翻轉數組,會修改數組元素值

#include <iostream>
using namespace std;
int main() {int a[5] = { 1,2,3,4,5 };reverse(a, a + 5);for (int i = 0; i < 5; i++) {cout << a[i];//54321}
}

(4)unique
去除相鄰重復元素
復雜度O(n)

#include <iostream>
#include <algorithm>
using namespace std;
int main() {int a[10] = { 1, 2, 2, 3, 3, 3, 4, 5, 5, 5 };int* b=unique(a, a + 10);//指針b指向了去重后的最后一個元素的下一個位置int n = b-a;//b-起始地址即為去重后數組的元素個數for (int i = 0; i < n; i++) {cout << a[i];//12345}
}

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

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

相關文章

Java一對一聊天

服務端 package 一對一用戶;import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector;…

three.js 入門三:buffergeometry貼圖屬性(position、index和uvs)

環境&#xff1a; three.js 0.159.0 一、基礎知識 geometry&#xff1a;決定物體的幾何形狀、輪廓&#xff1b;material&#xff1a;決定物體呈現的色彩、光影特性、貼圖皮膚&#xff1b;mesh&#xff1a;場景中的物體&#xff0c;由geometry和materia組成&#xff1b;textu…

十五、機器學習進階知識:K-Means聚類算法

文章目錄 1、聚類概述2、K-Means聚類算法原理3、K-Means聚類實現3.1 基于SKlearn實現K-Means聚類3.2 自編寫方式實現K-Means聚類 4、算法不足與解決思路4.1 存在的問題4.2 常見K值確定方法4.3 算法評估優化思路 1、聚類概述 聚類&#xff08;Clustering&#xff09;是指將不同…

淺談WPF之控件拖拽與拖動

使用過office的visio軟件畫圖的小伙伴都知道&#xff0c;畫圖軟件分為兩部分&#xff0c;左側圖形庫&#xff0c;存放各種圖標&#xff0c;右側是一個畫布&#xff0c;將左側圖形庫的圖標控件拖拽到右側畫布&#xff0c;就會生成一個新的控件&#xff0c;并且可以自由拖動。那如…

Python---面向對象其他特性

1、類屬性 Python中&#xff0c;屬性可以分為實例屬性和類屬性。 類屬性就是 類對象中定義的屬性&#xff0c;它被該類的所有實例對象所共有。通常用來記錄 與這類相關 的特征&#xff0c;類屬性 不會用于記錄 具體對象的特征。 在Python中&#xff0c;一切皆對象。類也是一…

1 接口測試介紹

在軟件測試工作中&#xff0c;接口測試是必不可少的。接口測試一般是發生在單元測試之后&#xff0c;系統測試之前。當開發人員輸出API文檔后&#xff0c;測試人員就可以開始編寫接口測試用例了。接口測試可以讓測試人員更早的介入&#xff0c;不需要等待前后端聯調完成才開始測…

銀行卡二要素API的應用案例:從在線購物到金融投資

引言 隨著互聯網技術的不斷發展&#xff0c;人們的金融需求也在不斷增加。隨之而來的是各種新型金融服務的涌現&#xff0c;讓用戶的金融體驗更加便利快捷。其中&#xff0c;銀行卡二要素API的應用&#xff0c;則為用戶的金融體驗和安全性提供了極大的保障。 銀行卡二要素API…

知識蒸餾的蒸餾損失方法代碼總結(包括:基于logits的方法:KLDiv,dist,dkd等,基于中間層提示的方法:)

有兩種知識蒸餾方法&#xff1a;一種利用教師模型的輸出概率&#xff08;基于logits的方法&#xff09;[15,14,11]&#xff0c;另一種利用教師模型的中間表示&#xff08;基于提示的方法&#xff09;[12,13,18,17]。基于logits的方法利用教師的輸出作為輔助信號來訓練一個較小的…

VBA語法結構及編程思想

VBA&#xff08;Visual Basic for Applications&#xff09;是一種編程語言&#xff0c;它被用于Microsoft Office應用程序的自動化&#xff0c;允許用戶編寫宏來執行常規任務。VBA是基于Microsoft的Visual Basic語言&#xff0c;但專為Office應用程序定制。 VBA語法格式 VBA的…

【STM32】TIM定時器輸出比較

1 輸出比較 1.1 輸出比較簡介 OC&#xff08;Output Compare&#xff09;輸出比較&#xff1b;IC&#xff08;Input Capture&#xff09;輸入捕獲&#xff1b;CC&#xff08;Capture/Compare&#xff09;輸入捕獲和輸出比較的單元輸出比較可以通過比較CNT與CCR寄存器值&#…

JavaWeb-HTTP協議

1. 什么是HTTP協議 HTTP超文本傳輸協(Hyper Text transfer protocol)&#xff0c;是一種用于用于分布式、協作式和超媒體信息系統的應用層協議。它于1990年提出&#xff0c;經過十幾年的使用與發展&#xff0c;得到不斷地完善和擴展。HTTP 是為 Web 瀏覽器與 Web 服務器之間的…

AI自動生成代碼工具

AI自動生成代碼工具是一種利用人工智能技術來輔助或自動化軟件開發過程中的編碼任務的工具。這些工具使用機器學習和自然語言處理等技術&#xff0c;根據開發者的需求生成相應的源代碼。以下是一些常見的AI自動生成代碼工具&#xff0c;希望對大家有所幫助。北京木奇移動技術有…

Redisson的基本使用

Redisson官網描述&#xff1a;Redisson 是一個在 Redis 的基礎上實現的 Java 駐內存數據網格客戶端&#xff08;In-Memory Data Grid&#xff09;。它不僅提供了一系列的 redis 常用數據結構命令服務&#xff0c;還提供了許多分布式服務&#xff0c;例如分布式鎖、分布式對象、…

HCIP —— BGP 基礎 (上)

BGP --- 邊界網關協議 &#xff08;路徑矢量協議&#xff09; IGP --- 內部網關協議 --- OSPF RIP ISIS EGP --- 外部網關協議 --- EGP BGP AS --- 自治系統 由單一的組織或者機構獨立維護的網絡設備以及網絡資源的集合。 因 網絡范圍太大 需 自治 。 為區分不同的AS&#…

vim常見操作

vim常見操作 文章目錄 vim常見操作1. 回退/前進2. 搜索3. 刪除4. 定位到50行5. 顯示行號6. 復制粘貼7. 剪貼8. 替換9. vim打開文件的時候出現 1. 回退/前進 1.esc進入命令模式 2.ctrlr 前進 u 回退2. 搜索 1&#xff09; esc進入命令模式 2&#xff09; /text  查找text&am…

Docker load 命令

docker load &#xff1a;導入使用docker save命令導出的鏡像。 語法 docker load [OPTIONS]OPTIONS 說明&#xff1a; --input , -i &#xff1a;指定導入的文件&#xff0c;代替STDIN。 --quiet , -q &#xff1a;精簡輸出信息。 實例&#xff1a; 導入鏡像&#xff1a…

【STM32】TIM定時器輸入捕獲

1 輸入捕獲 1.1 輸入捕獲簡介 IC&#xff08;Input Capture&#xff09;輸入捕獲 輸入捕獲模式下&#xff0c;當通道輸入引腳出現指定電平跳變時&#xff08;上升沿/下降沿&#xff09;&#xff0c;當前CNT的值將被鎖存到CCR中&#xff08;把CNT的值讀出來&#xff0c;寫入到…

ubuntu16.04安裝ROS+Gazebo

ubuntu16.04安裝ROS參考文章 ros安裝&#xff08;一鍵最簡安裝&#xff0c;吹爆魚香ROS&#xff0c;請叫我魚吹&#xff09; ROS篇——Ubuntu快速一鍵安裝ROS或ROS2&#xff08;通用&#xff09; ubuntu安裝ROS melodic(最新、超詳細圖文教程) 配置ubuntu以及安裝ros2必要環…

類風濕性關節炎口腔黏膜破裂引發抗瓜氨酸細菌和人蛋白抗體反應

今天給同學們分享一篇實驗文章“Oral mucosal breaks trigger anti-citrullinated bacterial and human protein antibody responses in rheumatoid arthritis”&#xff0c;這篇文章發表在Sci Transl Med期刊上&#xff0c;影響因子為17.1。 結果解讀&#xff1a; 口腔黏膜破…

Redis主從復制的配置和實現原理

Redis的持久化功能在一定程度上保證了數據的安全性&#xff0c;即便是服務器宕機的情況下&#xff0c;也可以保證數據的丟失非常少。通常&#xff0c;為了避免服務的單點故障&#xff0c;會把數據復制到多個副本放在不同的服務器上&#xff0c;且這些擁有數據副本的服務器可以用…