c++中的STL的常用算法---3(排序算法,拷贝和替换算法,算术生成算法,集合算法)
生活随笔
收集整理的這篇文章主要介紹了
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(排序算法,拷贝和替换算法,算术生成算法,集合算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DNF68红眼与70红眼刷真野猪伤害会不
- 下一篇: c++中STL实现演讲比赛流程