3_STL算法
1.常用遍歷算法
1.1 for_each
for_each算法返回值是函數對象,可以記錄函數的運行狀態(函數對象被調用次數)
1.2 transform
一個容器的元素 通過op(函數對象) 變換到另一個容器中(同一個容器)
兩個容器的元素 通過op 變換到另一個容器中。
注:如果目標與源相同,transform()和for_each()一樣;
如果想以某值替換符合規則的元素,應使用replace()(是transform的特例,但速度更快)
//把運算結果直接輸出到屏幕 #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類型的謂詞); //可以對自定義數據類型進行計數?
排序:
合并排序,是歸并排序中的最后一步
隨機洗牌:
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
總結
- 上一篇: iOS---A valid provis
- 下一篇: pl/sql里的exists和in的差别