日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ STL算法

發布時間:2025/4/5 c/c++ 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ STL算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

STL 提供了大量操作容器的算法,這些算法大致可以分為:排序、搜索、集合運算、數值處理和拷貝等,這些算法的實現是采用函數模板來實現的,函數模板類似于類模板。對于 STL 算法而言,算法是一樣的,只是所處理的容器不同,只要使用合適的迭代器,就可以直接用算法操作容器了。

#include <iostream> #include <vector> #include <algorithm> using namespace std; bool compare( const int & a, const int & b) {return a > b; } void display( int i ) {cout<< i << " "; } bool odd( int i ) {return i % 2 != 0; } int main() {vector < int > num ( 10 );//生成隨機數字,填充numgenerate( num.begin(), num.end(), rand );//將其中的奇數全部替換我0replace_if( num.begin(), num.end(), odd, 0 );//從大到小排序sort( num.begin(), num.end(), compare );for_each( num.begin(), num.end(), display );cout << endl;return 0; }

如果我們需要使用 STL 算法,則需要在頭文件中包括頭文件,在本程序中使用了四種 STL 算法:generate()、replace_if()、sort() 和 for_each()。下面我們來一一了解這四種算法的功能。

generate() 函數前面兩個參數均為迭代器,分別指向開頭和結尾,通過這兩個迭代器,我們可以為 num 的 10 個元素賦值。由于 num 是整型的 vector 實例,因此要求 generate() 函數的第三個參數返回值也為整型,因此我們將庫函數 rand() 作為第三個參數,用于生成隨機數,其返回值是整型。調用完 generate() 函數之后,num 中就填充了一些隨機數值。

replace_if() 前面兩個參數還是兩個迭代器,通過這兩個迭代器我們可以對 num() 進行遍歷,遍歷過程中會逐一判斷元素是否為奇數,如果為奇數,則將其換為 0。Replace_if() 要求第三個參數為一個返回 bool 類型的函數,為此我們專門設計了一個 odd() 函數,用于判斷數值是否為奇數,如果為奇數則返回 true,否則返回 false。因為 num 為 int 型 vector 實例,因此要求用來替換的元素也必須為 int 型,故 replace_if() 函數最后一個參數必須為 int 型,在本例中我們直接使用 0。

接著我們對 num 進行排序,sort() 函數前面兩個參數仍然是迭代器,第三個參數是可選的,默認情況下 sort() 將會以升序進行排序。本例中使用了第三個參數,第三個參數為 compare() 函數的函數名。因為 num 為整型實例,因此 compare() 函數的兩個參數為整型的引用。同時由于 sort() 函數要求第三個參數為返回一個 bool 類型的函數,因此 compare() 也必須返回 bool 類型。本例中我們希望 num 以降序的方式排列,因此我們 compare() 函數返回“a > b”。當我們返回“a < b”或者根本就不提供第三個參數時,函數將會以升序的形式排列 num。

最后為了打印 num 中的所有元素,我們使用了 for_each() 函數,當然如果使用循環根據下標或使用迭代器都是可以打印 num 中的元素的,只不過我們是想介紹一下 for_each() 函數而已。for_each() 函數前面兩個參數仍然是兩個迭代器,通過這兩個迭代器,我們就可以遍歷 num 中的元素。for_each() 函數第三個參數用來完成打印操作,我們定義了一個 display() 函數用于完成此操作。

在整個程序中我們一直沒有使用任何循環就完成了整個操作,這是因為這四個函數中分別定義了內建的迭代操作,而我們只需要指明迭代的起始和終止位置即可。

STL 中還提供了很多其它的算法,在今后的學習過程中,大家如果有需要可以去查找 C++ 的類庫手冊。

總結

以上是生活随笔為你收集整理的C++ STL算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。