下面可能是大家刚刚学习STL算法的一些疑惑。(仅限STL中的算法)
算法是什么?
算法是解决问题的方法,一系列解决问题的步骤。
那算法有什么用?
算法能使程序代码更加的简洁,且方便编。
算法难学嘛?
一点都不难,都是模板,内部人家都已经写好了,直接套就行。
上面这些就是我们即将要了解的一些算法了,看起来多,但是学起来要不了多久,
一,常用遍历算法
1,for_each算法
#include<iostream> #include<vector> #include<algorithm> using namespace std; //普通函数 void print1(int val) { cout << val << " "; } //仿函数 class print2 { public: void operator()(int val) { cout << val << " "; } }; void test1() { vector<int>v; for (int i = 0; i < 10; i++) { v.push_back(i); } for_each(v.begin(), v.end(), print1); cout << endl; for_each(v.begin(), v.end(), print2()); } int main() { test1(); return 0; }
2,transform算法
#include<iostream> #include<vector> #include<algorithm> using namespace std; class Transform { public: int operator()(int val) { return val + 99; } }; class Print { public: void operator()(int val) { cout << val << " "; } }; void test1() { vector<int>v; for (int i = 0; i < 10; i++) { v.push_back(i); } vector<int>Mytarget; //划重点,目标容器需提前开辟空间 Mytarget.resize(v.size()); transform(v.begin(), v.end(), Mytarget.begin(), Transform()); for_each(Mytarget.begin(), Mytarget.end(), Print()); } int main() { test1(); return 0; }
二,常用查找算法
1,find算法
#include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; //查找内置数据类型 void test1() { vector<int>v; for (int i = 0; i < 10; i++) { v.push_back(i); } vector<int>::iterator it = find(v.begin(), v.end(),5); if (it != v.end()) { cout << "已找到: " << *it << endl; } else { cout << "未找到" << endl; } } //查找自定义数据类型 class person { public: int m_Age; string m_Name; //重载等号运算符 bool operator==(const person& p) { if (this->m_Age == p.m_Age && this->m_Name == p.m_Name) { return true; } else { return false; } } person(string name, int age) { this->m_Age = age; this->m_Name = name; } }; void test2() { vector<person>v; person p1("111", 1); person p2("112", 2); person p3("113", 3); person p4("114", 4); person p5("115", 5); v.push_back(p1); v.push_back(p2); v.push_back(p3); v.push_back(p4); v.push_back(p5); vector<person>::iterator it = find(v.begin(), v.end(), p2); if (it != v.end()) { cout << "已找到: " << endl; } else { cout << "未找到" << endl; } } int main() { test1(); test2(); return 0; }
2,find_if算法
3,adjacent_find算法
4,binary_search算法
5,count算法
6,count_if算法
三,常用排序算法
1,sort算法
2,random_shuffleu算法
3,merge算法
最后得到的容器也是有序的,且顺序和其他两个容器相同。
4,reverse算法
四,常用拷贝和替换算法
1,copy算法
2,replace算法
3,replace_if算法
4,swap算法
容器一定要是同种类型的。
四,常用算术生成算法
1,accumulate算法
2,fill算法
五,常用集合算法
1,set_intersection算法
2,set_union算法
3,set_difference算法
注意:如果遇到对一个新容器进行操作,(未经初始化的容器),需要用resize开辟空间,不然程序会崩溃。
上面的图片(除了第一张)都是来源于黑马程序员。