当前位置: 首页> 健康> 母婴 > 免费网站知乎_中山中小企业网站制作_全球搜索引擎排名2021_seo搜索引擎优化知乎

免费网站知乎_中山中小企业网站制作_全球搜索引擎排名2021_seo搜索引擎优化知乎

时间:2025/7/12 5:02:02来源:https://blog.csdn.net/q1312022158/article/details/142373156 浏览次数:0次
免费网站知乎_中山中小企业网站制作_全球搜索引擎排名2021_seo搜索引擎优化知乎

STL常用算法

常用的遍历算法

for_each

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>void myPrint(int v)
{cout << v << "  ";
}class MyPrint
{
public:void operator()(int v){cout << v << "  ";}
};void test01()
{vector<int> v;for (int i = 0; i < 10; i++){v.push_back(i);}// 普通函数遍历for_each(v.begin(),v.end(),myPrint);cout << endl;// 函数对象遍历for_each(v.begin(), v.end(), MyPrint());cout << endl;
}
int main()
{test01();system("pause");return 0;
}

transform

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>class Transform
{
public:int operator()(int v){return v + 100;}
};class Print
{
public:void operator()(int v){cout << v << "  ";}};
void test01()
{vector<int> v;for (int i = 0; i < 10; i++){v.push_back(i);}vector<int> v2;//目标容器v2.resize(v.size());//提前开辟空间transform(v.begin(), v.end(), v2.begin(), Transform());for_each(v2.begin(), v2.end(), Print());cout << endl;
}
int main()
{test01();system("pause");return 0;
}

常用的查找算法

对于自定义数据类型,一般需要重载==号 operator==

find

自定义数据类型

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>// 内置数据类型
void test01()
{vector<int> v;for (int i = 0; i < 10; i++){v.push_back(i);}vector<int>::iterator pos = find(v.begin(), v.end(), 5);if (pos == v.end()){cout << "没有找到" << endl;}else{cout << "找到了" << *pos << endl;}
}class Person
{
public:bool operator==(Person p){if (this->name == p.name && this->age == p.age){return true;}return false;}Person(string name, int age){this->name = name;this->age = age;}string name;int age;
};// 自定义数据类型
void test02()
{vector<Person> v;v.push_back(Person("111",10));v.push_back(Person("222", 20));v.push_back(Person("333", 30));v.push_back(Person("444", 40));v.push_back(Person("555", 50));v.push_back(Person("666", 60));v.push_back(Person("777", 70));vector<Person>::iterator pos = find(v.begin(), v.end(), Person("222", 20));if (pos == v.end()){cout << "没有找到" << endl;}else{cout << "找到了" << endl<< "姓名:" << pos->name << "  年龄:" << pos->age << endl;}
}
int main()
{// test01();test02();system("pause");return 0;
}

find_if

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>class GreaterFive
{
public:bool operator()(int v){return v > 8;}
};
// 内置数据类型
void test01()
{vector<int> v;for (int i = 0; i < 10; i++){v.push_back(i);}vector<int>::iterator pos = find_if(v.begin(),v.end(), GreaterFive());if (pos == v.end()){cout << "没有找到" << endl;}else{cout << "找到了" << *pos << endl;}
}class Person
{
public:Person() {};bool operator()(Person p){return p.age > 50;}Person(string name, int age){this->name = name;this->age = age;}string name;int age;
};// 自定义数据类型
void test02()
{vector<Person> v;v.push_back(Person("111", 10));v.push_back(Person("222", 20));v.push_back(Person("333", 30));v.push_back(Person("444", 40));v.push_back(Person("555", 50));v.push_back(Person("666", 60));v.push_back(Person("777", 70));vector<Person>::iterator pos = find_if(v.begin(), v.end(), Person());if (pos == v.end()){cout << "没有找到" << endl;}else{cout << "找到了" << endl<< "姓名:" << pos->name << "  年龄:" << pos->age << endl;}
}
int main()
{// test01();test02();system("pause");return 0;
}

adjacent_find

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>void test01()
{vector<int> v;v.push_back(0);v.push_back(1);v.push_back(2);v.push_back(1);v.push_back(3);v.push_back(5);v.push_back(5);v.push_back(0);vector<int>::iterator pos = adjacent_find(v.begin(), v.end());if (pos == v.end()){cout << "没有找到" << endl;}else{cout << "找到了" << *pos << endl;}
}
int main()
{test01();system("pause");return 0;
}

binary_search

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>void test01()
{vector<int> v;for (int i = 0; i < 10; i++){v.push_back(i);}// 必须是有序的序列才能使用二分查找bool ret = binary_search(v.begin(), v.end(), 5);if (!ret){cout << "没有找到" << endl;}else{cout << "找到了" <<endl;}
}
int main()
{test01();system("pause");return 0;
}

count

第三个参数中放的是统计的元素,自定义数据类型,元素内要放operator==

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>// 内置数据类型
void test01()
{vector<int> v;for (int i = 0; i < 10; i++){v.push_back(i);}v.push_back(5);v.push_back(5);v.push_back(5);int ret = count(v.begin(), v.end(), 5);cout << ret << endl;
}class Person
{
public:bool operator==(Person p){return this->age == p.age;}//bool operator==(Person p)//{//	if (this->name == p.name && this->age == p.age)//	{//		return true;//	}//	return false;//}Person(string name, int age){this->name = name;this->age = age;}string name;int age;
};// 自定义数据类型
void test02()
{vector<Person> v;v.push_back(Person("111", 10));v.push_back(Person("222", 40));v.push_back(Person("333", 30));v.push_back(Person("444", 40));v.push_back(Person("555", 40));v.push_back(Person("666", 40));v.push_back(Person("777", 70));int ret = count(v.begin(), v.end(), Person("888",40));cout << ret << endl;}
int main()
{// test01();test02();system("pause");return 0;
}

count_if

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>class Greater5
{
public:bool operator()(int v){return v > 5;}
};
// 内置数据类型
void test01()
{vector<int> v;for (int i = 0; i < 15; i++){v.push_back(i);}v.push_back(5);v.push_back(5);v.push_back(5);cout << count_if(v.begin(), v.end(), Greater5()) << endl;
}class Person
{
public:Person() {};bool operator()(Person p){return p.age > 10;}bool operator==(Person p){return this->age == p.age;}//bool operator==(Person p)//{//	if (this->name == p.name && this->age == p.age)//	{//		return true;//	}//	return false;//}Person(string name, int age){this->name = name;this->age = age;}string name;int age;
};// 自定义数据类型
void test02()
{vector<Person> v;v.push_back(Person("111", 10));v.push_back(Person("222", 40));v.push_back(Person("333", 30));v.push_back(Person("444", 40));v.push_back(Person("555", 40));v.push_back(Person("666", 40));v.push_back(Person("777", 70));int ret = count_if(v.begin(), v.end(), Person());cout << ret << endl;}
int main()
{// test01();test02();system("pause");return 0;
}

常用排序算法

sort

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<functional>void print(int v)
{cout << v << "  ";
}
void test01()
{vector<int> v;for (int i = 0; i < 15; i++){v.push_back(i);}v.push_back(5);v.push_back(5);v.push_back(5);// 默认从大到小sort(v.begin(), v.end());for_each(v.begin(), v.end(), print);cout << endl;sort(v.begin(), v.end(),greater<int>());for_each(v.begin(), v.end(), print);cout << endl;
}
int main()
{test01();system("pause");return 0;
}

random_shuffle

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<functional>void print(int v)
{cout << v << "  ";
}
void test01()
{vector<int> v;for (int i = 0; i < 15; i++){v.push_back(i);}random_shuffle(v.begin(),v.end());for_each(v.begin(), v.end(), print);cout << endl;
}
int main()
{srand((unsigned int)time(NULL));test01();system("pause");return 0;
}

merge

自定义数据类型还没高明白

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>void print(int v)
{cout << v << "  ";
}
// 内置数据类型
void test01()
{vector<int> v;vector<int> v2;for (int i = 0; i < 10; i++){v.push_back(i);v2.push_back(i + 2);}vector<int> vTarget;vTarget.resize(v.size() + v2.size());// 合并后仍然是有序的merge(v.begin(), v.end(), v2.begin(), v2.end(), vTarget.begin());for_each(vTarget.begin(),vTarget.end(), print);cout << endl;
}class Person
{
public:Person() {};bool operator<(const Person& p)const{return false;}bool operator==(Person p){if (this->name == p.name && this->age == p.age){return true;}return false;}Person(string name, int age){this->name = name;this->age = age;}string name;int age;
};//class Compare
//{
//public:
//	bool operator()(Person p1, Person p2)
//	{
//		return p1.age > p2.age;
//	}
//};
//void print2(Person p)
//{
//	cout << "姓名:\t" << p.name << "\t"
//		<< "年龄:" << p.age << endl;
//}自定义数据类型
//void test02()
//{
//	vector<Person> v;
//	v.push_back(Person("111", 20));
//	v.push_back(Person("222", 20));
//	v.push_back(Person("333", 30));
//	v.push_back(Person("444", 40));
//	v.push_back(Person("555", 50));
//	v.push_back(Person("666", 60));
//	v.push_back(Person("777", 70));
//	vector<Person> v2;
//	v2.push_back(Person("888", 30));
//	v2.push_back(Person("101", 40));
//	v2.push_back(Person("999", 90));
//
//	vector<Person> vTarget;
//	vTarget.resize(v.size()+v2.size());
//
//	merge(v.begin(), v.end(), v2.begin(), v2.end(), vTarget.begin(), Person());
//
//	for_each(vTarget.begin(), vTarget.end(), print2);
//	cout << endl;
//}
int main()
{test01();//test02();system("pause");return 0;
}

reverse

常用的拷贝和替换算法

copy

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
void print(int v)
{cout << v << "  ";
}
void test01()
{vector<int> v;for (int i = 0; i < 10; i++){v.push_back(i);}for_each(v.begin(), v.end(), print);cout << endl;vector<int> v2;v2.resize(v.size());copy(v.begin(),v.end(),v2.begin());for_each(v2.begin(), v2.end(), print);cout << endl;
}
int main()
{test01();system("pause");return 0;
}

replace

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>class Print
{
public:void operator()(int v){cout << v << "  ";}
};
void test01()
{vector<int> v;v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(20);v.push_back(20);v.push_back(60);v.push_back(80);cout << "替换前" << endl;for_each(v.begin(),v.end(), Print());cout << endl;replace(v.begin(),v.end(),20,22);for_each(v.begin(), v.end(), Print());cout << endl;}
int main()
{test01();system("pause");return 0;
}

replace_if

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>class Print
{
public:void operator()(int v){cout << v << "  ";}
};class greater30
{
public:bool operator()(int v){return v >= 30;}
};
void test01()
{vector<int> v;v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(20);v.push_back(20);v.push_back(60);v.push_back(80);cout << "替换前" << endl;for_each(v.begin(), v.end(), Print());cout << endl;cout << "替换后" << endl;replace_if(v.begin(), v.end(), greater30(), 11);for_each(v.begin(), v.end(), Print());cout << endl;}
int main()
{test01();system("pause");return 0;
}

swap

两个容器必须同一种类型

大小可以不一样

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>class Print
{
public:void operator()(int v){cout << v << "  ";}
};void test01()
{vector<int> v;v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(20);v.push_back(20);v.push_back(60);v.push_back(80);vector<int> v2;v2.push_back(111);cout << "替换前" << endl;for_each(v.begin(), v.end(), Print());cout << endl;for_each(v2.begin(), v2.end(), Print());cout << endl;cout << "替换后" << endl;swap(v, v2);for_each(v.begin(), v.end(), Print());cout << endl;for_each(v2.begin(), v2.end(), Print());cout << endl;}
int main()
{test01();system("pause");return 0;
}

常用算数生成算法

numeric 英文 数字的

accumulate

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<numeric>
#include<string>void test01()
{vector<int> v;for (int i = 0; i < 10; i++){v.push_back(i);}cout << accumulate(v.begin(), v.end(), 0) << endl;}
int main()
{test01();system("pause");return 0;
}

对于自定义数据类型的应用

https://www.jb51.net/article/242034.htm

fill

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>class Print
{
public:void operator()(int v){cout << v << "  ";}
};void test01()
{vector<int> v;v.resize(10);for_each(v.begin(), v.end(), Print());cout << endl;fill(v.begin(), v.end(), 100);for_each(v.begin(), v.end(), Print());cout << endl;
}
int main()
{test01();system("pause");return 0;
}

常用的集合算法

set_intersection

返回交集的最后一个元素的下一个位置(我的是正确的,图片里是错误的)

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>class Print
{
public:void operator()(int v){cout << v << "  ";}
};void test01()
{vector<int> v;vector<int> v2;for (int i = 0; i < 10; i++){v.push_back(i);v2.push_back(i + 5);}vector<int> v3;v3.resize(min(v.size(), v2.size()));vector<int>::iterator pos = set_intersection(v.begin(),v.end(),v2.begin(),v2.end(), v3.begin());// pos 指向最后一个元素的下一个位置cout << *pos << endl;for_each(v3.begin(), pos, Print());cout << endl;
}
int main()
{test01();system("pause");return 0;
}

ste_union

返回交集的最后一个元素的下一个位置(我的是正确的,图片里是错误的)

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>class Print
{
public:void operator()(int v){cout << v << "  ";}
};void test01()
{vector<int> v;vector<int> v2;for (int i = 0; i < 10; i++){v.push_back(i);v2.push_back(i + 5);}vector<int> v3;v3.resize(v.size()+v2.size());vector<int>::iterator pos = set_union(v.begin(), v.end(), v2.begin(), v2.end(), v3.begin());// pos 指向最后一个元素的下一个位置cout << *pos << endl;for_each(v3.begin(), pos, Print());cout << endl;
}
int main()
{test01();system("pause");return 0;
}

set_difference

求谁的差集把谁的迭代器放前面

返回差集的最后一个元素的下一个位置(我的是正确的,图片里是错误的)

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>class Print
{
public:void operator()(int v){cout << v << "  ";}
};void test01()
{vector<int> v;vector<int> v2;for (int i = 0; i < 10; i++){v.push_back(i);v2.push_back(i + 5);}vector<int> v3;v3.resize(max(v.size(),v2.size()));vector<int>::iterator pos = set_difference(v.begin(), v.end(), v2.begin(), v2.end(), v3.begin());// pos 指向最后一个元素的下一个位置// cout << *pos << endl;cout << "v的差集为:" << endl;for_each(v3.begin(), pos, Print());cout << endl;vector<int>::iterator pos2 = set_difference(v2.begin(), v2.end(), v.begin(), v.end(), v3.begin());cout << "v2的差集为:" << endl;for_each(v3.begin(), pos2, Print());cout << endl;}int main()
{test01();system("pause");return 0;
}

关键字:免费网站知乎_中山中小企业网站制作_全球搜索引擎排名2021_seo搜索引擎优化知乎

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: