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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

c++中的STL的常用算法---3(排序算法,拷贝和替换算法,算术生成算法,集合算法)

發布時間:2023/11/30 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++中的STL的常用算法---3(排序算法,拷贝和替换算法,算术生成算法,集合算法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

排序算法

merge()

  • 以下是排序和通用算法:提供元素排序策略

  • merge: 合并兩個有序序列,存放到另一個序列。

    #include<iostream>using namespace std; #include<algorithm> #include<vector>void test01() {vector<int >v1;vector<int>v2;for (int i = 0; i < 10; i++){v1.push_back(i);v2.push_back(i+1);}vector<int>vTarget;vTarget.resize(v1.size() + v2.size());merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());for_each(vTarget.begin(), vTarget.end(), [](int v){cout << v <<" "; }); }
  • sort()

    sort: 以默認升序的方式重新排列指定范圍內的元素。若要改排序規則,可以輸入 比較函數。

    void test02() {vector<int >v1;v1.push_back(10);v1.push_back(40);v1.push_back(20);v1.push_back(90);v1.push_back(50);sort(v1.begin(), v1.end());for_each(v1.begin(), v1.end(), [](int val){cout << val << " "; });cout << endl;//從大到小sort(v1.begin(), v1.end(), greater<int>());for_each(v1.begin(), v1.end(), [](int val){cout << val << " "; });cout << endl; }

    random_shuffle()

  • random_shuffle: 對指定范圍內的元素隨機調整次序。

  • srand(time(0)); //設置隨機種子

    void test03() {vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}//把有序序列變成無序random_shuffle(v.begin(), v.end());for_each(v.begin(), v.end(), [](int val){cout << val << " "; });cout << endl; }
  • reverse()

    翻轉

    void test04() {vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}reverse(v.begin(), v.end());for_each(v.begin(), v.end(), [](int val){cout << val << " "; });}

    拷貝和替換算法

    copy()

    void test01() {vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}vector<int>vTarget;vTarget.resize(v.size());copy(v.begin(), v.end(), vTarget.begin());//for_each(vTarget.begin(), vTarget.end(), [](int val){cout << val << " "; });//流迭代器方式遍歷copy(vTarget.begin(), vTarget.end(), ostream_iterator<int>(cout, ""));}

    replace()

    replace(beg,end,oldValue,newValue): 將指定范圍內的所有等于oldValue的元素替 換成 newValue。

    replace_if()

    replace_if: 將指定范圍內所有操作結果為 true 的元素用新值替換。

    class MyCompare { public:bool operator()(int v){return v > 3;} }; void test02() {vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}//把容器等中的3替換成300replace(v.begin(), v.end(), 3, 300);copy(v.begin(), v.end(), ostream_iterator <int>(cout, " "));cout << endl;//把容器中所有大于3的數字都替換成30000replace_if(v.begin(), v.end(), MyCompare(), 30000);copy(v.begin(), v.end(), ostream_iterator <int>(cout, " "));cout << endl;}

    swap()

    swap: 交換兩個容器的元素

    void test03() {vector<int>v1;for (int i = 0; i < 10; i++){v1.push_back(i);}vector<int>v2;v2.push_back(10);v2.push_back(30);v2.push_back(20);v2.push_back(40);cout << "交換前數據:" << endl;copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, " "));cout << endl;copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, " "));cout << endl;cout << "交換后的數據:" << endl;swap(v1, v2);copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, " "));cout << endl;copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, " "));cout << endl;}

    算術生成算法

    accumulate()

    accumulate: 對指定范圍內的元素求和,然后結果再加上一個由 val 指定的初始值

    #include<iostream> #include<vector> using namespace std; #include<algorithm> #include<numeric> #include<iterator>void test01() {vector<int>v;for (int i = 0; i <= 100; i++){v.push_back(i);}//0~100累計和 5050//第三個參數 起始累加值int sum=accumulate(v.begin(), v.end(), 0);cout << "總和為:" << sum << endl;}

    fill()

    fill: 將輸入值賦給標志范圍內的所有元素。

    void test02() {vector<int>v;v.resize(10);fill(v.begin(), v.end(),1000);copy(v.begin(), v.end(), ostream_iterator<int>(cout, " ")); }

    集合算法

    set_union()

    set_union: 構造一個有序序列,包含兩個有序序列的并集。

    void test02() {vector<int>v1;vector<int>v2;for (int i = 0; i < 10; i++){v1.push_back(i);//0 1 2 3 4 5 6 7 8 9v2.push_back(i + 5);// 5 6 7 8 9 10 11 12 13 14 }vector<int>vTarget;vTarget.resize(v1.size() + v2.size());vector<int>::iterator itEnd = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());copy(vTarget.begin(), itEnd, ostream_iterator<int>(cout, " ")); }

    vset_intersection()

    set_intersection: 構造一個有序序列,包含兩個有序序列的交集。

    void test01() {vector<int>v1;vector<int>v2;for (int i = 0; i < 10; i++){v1.push_back(i);//0 1 2 3 4 5 6 7 8 9v2.push_back(i + 5);// 5 6 7 8 9 10 11 12 13 14 }vector<int>vTarget;vTarget.resize(min(v1.size(),v2.size()));vector<int>::iterator itEnd= set_intersection(v1.begin(), v1.end(),v2.begin(), v2.end(), vTarget.begin());copy(vTarget.begin(), itEnd, ostream_iterator<int>(cout, " ")); }

    set_difference()

    set_difference: 構造一個有序序列,該序列保留第一個有序序列中存在而第二個有

    void test03() {vector<int>v1;vector<int>v2;for (int i = 0; i < 10; i++){v1.push_back(i);//0 1 2 3 4 5 6 7 8 9v2.push_back(i + 5);// 5 6 7 8 9 10 11 12 13 14 }vector<int>vTarget;vTarget.resize(max(v1.size(), v2.size()));//v1差v2vector<int>::iterator itEnd = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());copy(vTarget.begin(), itEnd, ostream_iterator<int>(cout, " "));cout << endl;//v2差v1itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTarget.begin());copy(vTarget.begin(), itEnd, ostream_iterator<int>(cout, " ")); }

    總結

    以上是生活随笔為你收集整理的c++中的STL的常用算法---3(排序算法,拷贝和替换算法,算术生成算法,集合算法)的全部內容,希望文章能夠幫你解決所遇到的問題。

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