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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

3_STL算法

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

1.常用遍歷算法
1.1 for_each

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

for_each算法返回值是函數(shù)對象,可以記錄函數(shù)的運行狀態(tài)(函數(shù)對象被調(diào)用次數(shù))

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


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

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

區(qū)別:

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


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

?

常用查找算法:(返回值是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); //謂詞

計數(shù)算法://返回值是元素的個數(shù)

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

?

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

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

隨機洗牌:

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

反轉(zhuǎn):

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);

?

常用的算術(shù)和生成算法: #include <numeric>

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

?

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

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

?

轉(zhuǎn)載于:https://www.cnblogs.com/Lunais/p/5850593.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。