日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

3_STL算法

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

1.常用遍歷算法
1.1 for_each

for_each(v1.begin(),v1.end(),show); void show(int &n) //回調函數的入口地址 {cout << n << " "; } class show //函數對象 { public:void operator()(int &n){cout << n << " ";} protected: private: }

for_each算法返回值是函數對象,可以記錄函數的運行狀態(函數對象被調用次數)

1.2 transform
一個容器的元素 通過op(函數對象) 變換到另一個容器中(同一個容器)
兩個容器的元素 通過op 變換到另一個容器中。


注:如果目標與源相同,transform()和for_each()一樣;
如果想以某值替換符合規則的元素,應使用replace()(是transform的特例,但速度更快)

transform(v1.begin(),v1.end(),increase); //回調函數 transform(v1.begin(),v1.end(),negate<int>()); //預定義函數對象 transform(v1.begin(),v1.end(),bind2nd(multiplies<int>(),10)); //函數適配器和函數對象
//把運算結果直接輸出到屏幕 #include "iterator" //輸出流迭代器的頭文件 transform(v1.begin(),v1.end(),ostream_iterator<int>(cout," "),negate<int>());int increase(int& a) //返回值為int {return a+1; }

區別:

for_each算法中的函數對象 參數一般為引用,無返回值
速度快,但不靈活


transform算法中的函數對象 參數一般為元素,有返回值,返回類型也為元素
速度慢,靈活;輸出到原來位置,也可以輸出到其他位置;

?

常用查找算法:(返回值是bool類型)

adjacent_find(v1.begin(),v2.begin()); //找元素中第一個重復的迭代器位置; //distance(v1.begin(),it); //可求迭代器的下標

?

有序序列中的二分查找:

binary_search(v1.begin(),v1.end(),7); //(返回值是bool類型) find(v1.begin(),v1.end(),5); //返回迭代器位置 find_if(v1.begin(),v1.end(),GreatThree); //謂詞

計數算法://返回值是元素的個數

count(v1.begin(),v1.end(),7); count_if(v1.begin(),v1.end(),bool類型的謂詞); //可以對自定義數據類型進行計數

?

排序:
合并排序,是歸并排序中的最后一步

merge(v1.begin(),v1.end(),v1.begin(),v2.end(),v3.begin());sort(v1.begin(),v1.end(),CompareS); //利用謂詞對自定義數據類型的排序

隨機洗牌:

random_shuffle(v1.begin(),v1.end()); //將v1亂序 //V1可以是一個字符串。。。string

反轉:

reverse(v1.begin(),v1.end()); //兩個指針交替往中間走,互換值

?

拷貝和替換:

vector<int>v2; v2.resize(v1.size()); copy(v1.begin(),v1.end(),v2.begin());replace(v1.begin(),v1.end(),3,8); //v1中所有3替換為8; replace_if(v1.begin(),v1.end(),great_equal_5,1);//滿足謂詞的元素全部替換為1; swap(v1,v2);

?

常用的算術和生成算法: #include <numeric>

accumulate(v1.begin(),v1.end(),100); //范圍內元素求和再加上100,返回最后的值 fill(v1.begin(),v1.end(),8); //范圍內元素全部填充為8;

?

常用的集合算法:交集,并集,差集

//并集: set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin()); //交集: set_intersection(); //差集 set_difference();

?

轉載于:https://www.cnblogs.com/Lunais/p/5850593.html

總結

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

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