您的位置:首页 > 文旅 > 美景 > 免费logo网站_广州logo设计公司排名_东莞网络营销网站建设_营销平台建设

免费logo网站_广州logo设计公司排名_东莞网络营销网站建设_营销平台建设

2025/4/2 17:54:00 来源:https://blog.csdn.net/2301_81507539/article/details/146841809  浏览:    关键词:免费logo网站_广州logo设计公司排名_东莞网络营销网站建设_营销平台建设
免费logo网站_广州logo设计公司排名_东莞网络营销网站建设_营销平台建设

遍历算法

for_each

for_each(v.begin(),v.end(),print01);

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>//常用遍历算法 for_each//普通函数
void print01(int val) {cout << val << " ";
}//仿函数
class print02 {
public:void operator()(int val) {cout << val << " ";}
};
void test01() {vector<int>v;for (int i = 0; i < 10; i++)v.push_back(i);for_each(v.begin(),v.end(),print01);//起始迭代器,结束迭代器,函数名/仿函数对象cout << endl;for_each(v.begin(), v.end(), print02());cout << endl;
}
int main() {test01();return 0;
}

transform

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//遍历算法 transform  搬运容器到另一个容器中
class Transform {
public:int operator()(int v) {return v;}
};
class MyPrint {
public:void operator()(int val) {cout << val << " ";}
};
void test01() {vector<int>v;for (int i = 0; i < 10; i++)v.push_back(i);vector<int>vTarget;//目标容器vTarget.resize(v.size());//目标容器需要提前开辟空间transform(v.begin(), v.end(), vTarget.begin(), Transform());for_each(vTarget.begin(), vTarget.end(), MyPrint());cout << endl;
}
int main() {test01();return 0;
}

查找算法

find

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>
//find
//查找 内置数据类型
void test01() {vector<int>v;for (int i = 0; i < 10; i++) {v.push_back(i);}//查找 容器中 是否有5这个元素vector<int>::iterator it = find(v.begin(), v.end(), 5);if (it == v.end()) {cout << "未找到" << endl;}else {cout << "找到:"<<*it << endl;}
}class Person {
public:Person(string name, int age) {this->m_Name = name;this->m_Age = age;}//重载 == 让底层 find知道如何对比person数据类型bool operator==(const Person& p) {if (this->m_Name == p.m_Name && this->m_Age == p.m_Age) {return true;}else {return false;}}string m_Name;int m_Age;
};
//查找 自定义数据类型
void test02() {vector<Person>v;//创建数据Person p1("aaa", 10);Person p2("bbb", 30);Person p3("ccc", 40);//放入到容器中v.push_back(p1);v.push_back(p2);v.push_back(p3);Person pp("bbb", 30);vector<Person>::iterator it = find(v.begin(), v.end(), pp);//找和pp一样的if (it == v.end()) {cout << "未找到" << endl;}else {cout << "找到了  姓名:" << it->m_Name << " 年龄:" << it->m_Age << endl;}
}
int main() {test01();test02();return 0;
}

find_if  按条件查找

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>
//find_if
//1.查找内置数据类型
class GreaterFive {//大于5的数
public:bool operator()(int val) {return val > 5;}
};
void test01() {vector<int>v;for (int i = 0; i < 10; i++)v.push_back(i);vector<int>::iterator it = find_if(v.begin(), v.end(), GreaterFive());if (it == v.end()) {cout << "未找到" << endl;}else {cout << "找到了>5的数据:" << *it << endl;}
}//2.查找自定义数据类型
class Person {
public:Person(string name, int age) {this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;
};
class Greater25 {
public:bool operator()(Person& p) {return p.m_Age > 25;}
};
void test02() {vector<Person>v;//创建数据Person p1("tom", 27);Person p2("mak", 25);Person p3("san", 22);Person p4("li", 23);v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);//找年龄>25的vector<Person>::iterator it = find_if(v.begin(), v.end(), Greater25());if (it == v.end()) {cout << "未找到" << endl;}else {cout << "找到了年龄>25的人 姓名:" << it->m_Name << endl;}
}
int main() {test01();test02();return 0;
}

adjacent_find  查找相邻重复元素

#include<iostream>
using namespace std;
//adjacent_find  查找相邻重复元素
#include<vector>
#include<algorithm>
void test() {vector<int>v;v.push_back(5);v.push_back(2);v.push_back(4);v.push_back(5);//相邻重复v.push_back(5);vector<int>::iterator pos = adjacent_find(v.begin(), v.end());if (pos == v.end()) {cout << "未找到相邻重复元素" << endl;}else {cout << "找到了:" << *pos << endl;//输出元素的值}
}
int main() {test();return 0;
}

binary_search 二分查找法  查找指定元素是否存在

#include<iostream>
using namespace std;
//binary_search 查找指定元素是否存在  条件:有序序列
#include<vector>
#include<algorithm>
void test() {vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}//查找元素中是否有9元素bool ret = binary_search(v.begin(), v.end(), 9);if (ret)cout << "找到了" << endl;elsecout << "未找到" << endl;
}int main() {test();return 0;
}

count 统计元素个数

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>
//count
//1.统计内置数据类型
void test01() {vector<int>v;v.push_back(5);v.push_back(2);v.push_back(4);v.push_back(5);v.push_back(5);int num = count(v.begin(),v.end(),5);//使用要包含算法的头文件cout << num << endl;
}//2.统计自定义数据类型
class Person {
public:Person(string name, int age) {this->m_Name = name;this->m_Age = age;}//重载 == 让底层 count知道如何对比 person数据类型bool operator==(const Person& p) {if (this->m_Age == p.m_Age) {return true;}else {return false;}}string m_Name;int m_Age;
};
void test02() {vector<Person>v;//创建容器Person p1("刘备", 23);//准备数据Person p2("关于", 21);Person p3("张飞", 26);Person p4("赵云", 21);//将人员插入到容器中v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);Person p5("诸葛亮", 21);int num = count(v.begin(), v.end(), p5);cout << "和诸葛亮同岁的人员个数为:" << num << endl;
}int main() {test01();cout << "--------------------------------" << endl;test02();return 0;
}

count_if

按条件统计元素个数

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>
//count_if
//1.统计内置数据类型
class Greater20 {
public:bool operator()(int val) {return val > 20;}
};
void test01() {vector<int>v;v.push_back(10);v.push_back(40);v.push_back(20);v.push_back(50);v.push_back(30);//统计>20的数int num = count_if(v.begin(), v.end(), Greater20());//Pred 写一个谓词cout << num << endl;//3
}//2.统计自定义数据类型
class Person {
public:Person(string name, int age) {this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;
};class AgeGreater20 {
public:bool operator()(const Person& p) {return p.m_Age > 21;}
};
void test02() {vector<Person>v;Person p1("刘备", 23);//准备数据Person p2("关于", 21);Person p3("张飞", 26);Person p4("赵云", 21);//将人员插入到容器中v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);//统计>21的数int num = count_if(v.begin(), v.end(), AgeGreater20());cout << num << endl;
}int main() {test01();cout << "--------------------------------" << endl;test02();return 0;
}

排序算法

sort

第三个参数可以不填,默认升序

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<functional>
void myPrint(int val) {cout << val << " ";
}
void test01() {vector<int>v;v.push_back(1);v.push_back(3);v.push_back(5);v.push_back(2);v.push_back(4);//sort升序sort(v.begin(), v.end());for_each(v.begin(), v.end(),myPrint);cout << endl;//sort降序sort(v.begin(), v.end(),greater<int>());for_each(v.begin(), v.end(), myPrint);cout << endl;
}
int main() {test01();return 0;
}

random_shuffle 洗牌 指定范围的元素随机调整次序

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//random_shuffle 洗牌 指定范围的元素随机调整次序
#include<ctime>//time的头文件
void myPrint(int val) {cout << val << " ";
}
void test01() {srand((unsigned int)time(NULL));//随机数vector<int>v;v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);v.push_back(5);random_shuffle(v.begin(), v.end());for_each(v.begin(), v.end(), myPrint);
}
int main() {test01();return 0;
}

merge 合并两个有序容器

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//merge
void myPrint(int val) {cout << val << " ";
}
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(), myPrint);cout << endl;
}
int main() {test01();return 0;
}

reverse

拷贝和替换算法

copy

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//copy
void myPrint(int val) {cout << val << " ";
}
void test01() {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);cout << endl;
}
int main() {test01();return 0;
}

replace

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
class MyPrint {
public:void operator()(int val) {cout << val << " ";}
};
void test01() {vector<int>v;v.push_back(1);v.push_back(3);v.push_back(3);v.push_back(2);v.push_back(3);cout << "替换前" << endl;for_each(v.begin(), v.end(), MyPrint());cout << endl;cout << "替换后" << endl;replace(v.begin(), v.end(), 3, 3000);for_each(v.begin(), v.end(), MyPrint());cout << endl;
}
int main() {test01();return 0;
}

replace_if

将区间内满足条件的元素替换成指定元素

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
class MyPrint {
public:void operator()(int val) {cout << val << " ";}
};
class Greater3 {//谓词
public:bool operator()(int val) {return val >= 3;}
};
void test01() {vector<int>v;v.push_back(1);v.push_back(3);v.push_back(3);v.push_back(2);v.push_back(4);cout << "替换前" << endl;for_each(v.begin(), v.end(), MyPrint());cout << endl;cout << "替换后" << endl;replace_if(v.begin(), v.end(), Greater3(), 3000);//第三个位置 谓词for_each(v.begin(), v.end(), MyPrint());cout << endl;
}
int main() {test01();return 0;
}

swap

互换两个同种类型的元素

swap(v1, v2);

算术生成算法

accumulate

#include<iostream>
using namespace std;
#include<vector>
#include<numeric>//accumulate头文件
void test() {vector<int>v;for (int i = 1; i <= 100; i++)v.push_back(i);//5050int total = accumulate(v.begin(), v.end(), 0);//起始累加值cout << total << endl;
}
int main() {test();return 0;
}

fill

#include<iostream>
using namespace std;
#include<vector>
#include<numeric>//fill头文件
#include<algorithm>
void myPrint(int val) {cout << val << " ";
}
void test() {vector<int>v;v.resize(5);//指定大小//重新填充fill(v.begin(), v.end(), 100);//100 100 100 100 100for_each(v.begin(), v.end(), myPrint);
}
int main() {test();return 0;
}

集合算法

前提是两个容器是有序的

交集

并集

差集

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//交集  set_intersection
//并集  set_union
void myPrint(int val) {cout << val << " ";
}
void test() {vector<int>v1;vector<int>v2;for (int i = 0; i < 10; i++) {v1.push_back(i);//0~9v2.push_back(i + 5);//5~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());for_each(vTarget.begin(), itEnd, myPrint);cout << endl;//获取并集vector<int>v1Target;v1Target.resize(v1.size()+v2.size());vector<int>::iterator it = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v1Target.begin());for_each(v1Target.begin(), it, myPrint);cout << endl;//获取差集 v1和v2的vector<int>v2Target;v2Target.resize(max(v1.size(),v2.size()));vector<int>::iterator itd = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), v2Target.begin());for_each(v2Target.begin(), itd, myPrint);cout << endl;
}
int main() {test();return 0;
}

版权声明:

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

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