STL常用算法(持续更新)
一、遍历函数
1.for_each遍历函数
#include<iostream> using namespace std; #include<algorithm> #include<vector> //for_each遍历函数 //普通函数 void pri(int val) { cout << val << " "; } class myprint { public: void operator()(int val1) { cout << val1 << " "; } }; int main(void) { vector<int> v; for (int i = 0; i < 10; i++) v.push_back(i); for_each(v.begin(), v.end(), pri); cout <<endl<< "-----------------------------" << endl; for_each(v.begin(), v.end(), myprint()); return 0; }
二.拷贝函数
1.copy
#include<iostream> using namespace std; #include<vector> #include<algorithm> class myprint { public: void operator()(int val) { cout << val << " "; } }; //copy算法功能:容器内指定范围的元素拷贝到另一容器 int main(void) { vector<int> v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } vector<int> v2; v2.resize(v1.size()); copy(v1.begin(), v1.end(), v2.begin()); for_each(v2.begin(), v2.end(), myprint()); return 0; }
三、集合算法
求并集


#include<iostream> using namespace std; #include<algorithm> #include<vector> void myprint(int val) { cout << val << " "; } //集合合并set_union int main(void) { vector<int> v1; vector<int>v2;//要求并集的两个容器,且两个容器需要是有序的 for (int i = 0; i < 10; i++) { v1.push_back(i); v2.push_back(i + 5); } vector<int>v3;//目标容器 v3.resize(v1.size() + v2.size());// 放置并集前需要先分配大小 vector<int>::iterator itend = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());//返回目标容器最后放置数的迭代器 for_each(v3.begin(), itend, myprint); cout << endl; return 0; }
交集算法


#include<iostream> using namespace std; #include<algorithm> #include<vector> //获得交集算法set_intersection void myprint(int val) { cout << val << " "; } int main(void) { vector<int>v1; vector<int> v2; for (int i = 0; i < 10; i++) { v1.push_back(i); v2.push_back(i + 5); } vector<int>v3;//目标容器需要提前开辟空间 v3.resize(min(v1.size(), v2.size())); vector<int>::iterator itend = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin()); for_each(v3.begin(), itend, myprint); cout << endl; return 0; }
排列算法
#include<cstdio> #include<algorithm> #include<iostream> using namespace std; int main(void) { int n, p[10]; cin >> n; for (int i = 0; i < n; i++) cin >> p[i]; sort(p, p + n);//先排序 do { for (int i = 0; i < n; i++)printf("%d ", p[i]); cout << endl; } while (next_permutation(p, p + n)); return 0; }
去重算法unique
#include<cstdio> #include<algorithm> #include<iostream> using namespace std; int main(void) { int N; cin >> N; int a[10000]; for (int i = 0; i < N; i++) cin >> a[i]; sort(a, a + N); int x = unique(a, a + N)-a;//去重算法,返回最后一个数的指针,需要先排序 cout << x << endl; for (int i = 0; i < x; i++)cout << a[i] << " "; return 0; }
最大公约数算法 __gcd(注意前面的下划线是两个)
#include<cstdio> #include<algorithm> #include<iostream> #include<map> using namespace std; int ans,x; int main(void) { for(int i = 1;i<=2020;i++) if(__gcd(i,2020) == 1)ans++; cout << ans; return 0; }
计算一个数组内某个值的出现次数 count
#include<iostream> #include<algorithm> using namespace std; int main(void) { int maxi = -99999; int mini = 999999; string s; cin >> s; for(char ch = 'a';ch<='z';ch++) { int x = count(s.begin(),s.end(),ch); if(x == 0)continue; maxi = max(maxi,x); mini = min(mini,x); } cout << maxi-mini; return 0; }
计算机小白记录学习过程,喜欢就点个推荐和关注吧O(∩_∩)O哈哈~

浙公网安备 33010602011771号