#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <map>
#define meishu 0
#define tiyu 1
#define yinyue 2
class person
{
public:
person(string name, int part)
{
this->m_name = name;
this->m_part = part;
}
string m_name;
int m_part;
};
void myprint(vector<person>& v)
{
for (vector<person>::iterator it = v.begin(); it != v.end(); it++)
{
cout << (*it).m_name << " " << (*it).m_part << endl;
}
}
void setgroup(vector<person>&v,multimap<int,person>&m)
{
for (vector<person>::iterator it = v.begin(); it != v.end(); it++)
{
int deptid = rand() % 3;
m.insert(make_pair(deptid, *it));
}
for (multimap<int, person>::iterator it = m.begin(); it != m.end(); it++)
{
cout << (*it).second.m_name << " " << (*it).second.m_part << " " << (*it).first << endl;
}
}
void showpart(multimap<int, person>&m)
{
cout << "meishu" << endl;
multimap<int, person>::iterator part0 =m.find(meishu);//查找meishu的位置
int index0 = 0;
int num0 = m.count(meishu);
for (; part0 != m.end() && index0 < num0; part0++, index0++)
{
cout << (*part0).second.m_name <<" " << (*part0).second.m_part << endl;
}
cout << "tiyu" << endl;
multimap<int, person>::iterator part1 = m.find(tiyu);//查找meishu的位置
int index1 = 0;
int num1 = m.count(tiyu);
for (; part1 != m.end() && index1 < num1; part1++, index1++)
{
cout << (*part1).second.m_name << " " << (*part1).second.m_part << endl;
}
cout << "yinyue" << endl;
multimap<int, person>::iterator part2 = m.find(yinyue);//查找meishu的位置
int index2 = 0;
int num2 = m.count(yinyue);
for (; part2 != m.end() && index2 < num2; part2++, index2++)
{
cout << (*part2).second.m_name << " " << (*part2).second.m_part << endl;
}
}
int main()
{
vector<person>v;
person p1("a", 1);
person p2("a1", 5);
person p3("a2", 2);
person p4("a3", 7);
person p5("a4", 8);
person p6("a5", 4);
person p7("a6", 6);
person p8("a7", 2);
person p9("a8", 3);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
v.push_back(p5);
v.push_back(p6);
v.push_back(p7);
v.push_back(p8);
v.push_back(p9);
myprint(v);
multimap<int, person>m;
setgroup(v, m);
showpart(m);
}
#include <iostream>
using namespace std;
#include <string>
//函数对象
//仿函数 类
class myadd
{
public:
myadd()
{
this->count=0;
}
int operator()(int a, int b)
{
return a + b;
this->count++;
}
int count;
};
class myprint
{
public:
myprint()
{
this->count = 0;
}
void operator()(string a)
{
cout << a << endl;
this->count++;//内部状态
}
int count;
};
void test()
{
myadd myadd;
int addnum=myadd(10, 10);
cout << addnum << endl;
cout << myadd.count<< endl;
myprint myprint;
myprint("hello");
myprint("hello");
myprint("hello");
myprint("hello");
cout << myprint.count << endl;
}
//函数对象可以作为参数传递
void doprint(myprint& mp, string a)
{
mp(a);
}
int main()
{
test();
myprint mpp;
doprint(mpp, "aaaa");
}
#include <iostream>
using namespace std;
#include <string>
//谓词
//bool返回类型的反函数 谓词
//operator() 一个参数 一元谓词
//operator() 两个参数 二元谓词
class mysort
{
public:
bool operator()(int a,int b)// 二元谓词
{
return a > b;
}
};
class greatfive
{
public:
bool operator()(int a)// 一元谓词
{
return a > 5;
}
};
void test()
{
vector<int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
//greatfive() 是匿名函数对象
vector<int>::iterator it = find_if(v.begin(), v.end(), greatfive());//寻找大于5的元素
//找到第一个大于5的数字 就直接退出
if (it == v.end())
{
cout << "meiyou" << endl;
}
else
{
cout << (*it) << endl;
}
sort(v.begin(), v.end());//排序
sort(v.begin(), v.end(), mysort());
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << (*it) << endl;
}
}
int main()
{
test();
}
#include <iostream>
using namespace std;
#include <string>
#include <functional>//内建函数头文件
//内建函数对象
void test()
{
negate<int>n;//取反函数
cout << "shuru" << endl;
int a = 0;
cin >> a;
cout << n(a) << endl;
plus<int>p;//参数列表只写一个数据类型
cout << "shuru" << endl;
int a0 = 0;
cin >> a0;
int a1 = 0;
cin >> a1;
cout << p(a0, a1) << endl;
}
int main()
{
test();
}
#include <iostream>
using namespace std;
#include <string>
#include <functional>
//关系反函数
class mycom
{
public:
bool operator()(int a1,int a2)
{
return a1 > a2;
}
};
void test()
{
vector<int>v;
v.push_back(1);
v.push_back(2);
v.push_back(4);
v.push_back(3);
v.push_back(5);
sort(v.begin(), v.end(), mycom());// 自己的排序函数
sort(v.begin(), v.end(), greater<int>());//greater<int>() 是内建排序函数
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << endl;
}
}
int main()
{
test();
//myprint mpp;
//doprint(mpp, "aaaa");
}
#include <iostream>
using namespace std;
#include <string>
#include <functional>
//逻辑函数
void test()
{
vector<bool>v;
v.push_back(true);
v.push_back(true);
v.push_back(false);
v.push_back(true);
v.push_back(false);
for (vector<bool>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << endl;
}
cout << "-----------" << endl;
vector<bool>v1;
v1.resize(v.size());
//v1.begin() 搬运到新的容器 , logical_not<>() 并且取反
transform(v.begin(), v.end(), v1.begin(),logical_not<bool>());
for (vector<bool>::iterator it = v1.begin(); it != v1.end(); it++)
{
cout << *it << endl;
}
}
int main()
{
test();
//myprint mpp;
//doprint(mpp, "aaaa");
}
#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <functional>
//常用遍历算法
//普通函数
void myprint(int a)
{
cout << a << endl;
}
//仿函数
class myprint1
{
public:
void operator()(int val)
{
cout << val << endl;
}
};
//transform 的仿函数
class transform1
{
public:
int operator()(int val)//取到数据
{
return val;//放到新容器中
}
};
void test()
{
vector<int>v;
v.push_back(12);
v.push_back(13);
v.push_back(1);
v.push_back(15);
v.push_back(14);
// for_each 最常用
for_each(v.begin(), v.end(), myprint);//普通函数没有 ()
for_each(v.begin(), v.end(), myprint1());//仿函数有 ()
//transform 搬运
vector<int>v1;
v1.resize(v.size());//目标容器提前开辟空间
transform(v.begin(),v.end(),v1.begin(),transform1());
for_each(v.begin(), v.end(), myprint);//普通函数没有 ()
}
int main()
{
test();
//myprint mpp;
//doprint(mpp, "aaaa");
}
#include <iostream>
using namespace std;
#include <string>
#include <vector>
//常用查找算法
class person
{
public:
person(string name, int age)
{
this->m_name = name;
this->m_age = age;
}
//重载==
bool operator==(const person&p)
{
if (p.m_age == this->m_age&&p.m_name==this->m_name)
{
return true;
}
else
{
return false;
}
}
string m_name;
int m_age;
};
void test()
{
person p1("a", 1);
person p2("v", 4);
person p3("e", 16);
person p4("w", 12);
person p5("g", 18);
person p6("aq", 10);
vector<person>v;
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
v.push_back(p5);
v.push_back(p6);
vector<person>::iterator it=find(v.begin(),v.end(),p2);//find返回的是迭代器
if (it == v.end())
{
cout << "no" << endl;
}
else
{
cout << it->m_age<<(*it).m_name << endl;
}
}
int main()
{
test();
//myprint mpp;
//doprint(mpp, "aaaa");
}
#include <iostream>
using namespace std;
#include <string>
#include <vector>
//条件查找算法 find_if
class greaterfive// 谓词
{
public:
bool operator()(int val)
{
if (val > 5)
{
return true;
}
else
{
return false;
}
}
};
void test()
{
vector<int>v;
v.push_back(12);
v.push_back(13);
v.push_back(1);
v.push_back(15);
v.push_back(14);
vector<int>::iterator it=find_if(v.begin(), v.end(), greaterfive());
if (it == v.end())
{
cout << "no" << endl;
}
else
{
cout << *it << endl;
}
}
int main()
{
test();
//myprint mpp;
//doprint(mpp, "aaaa");
}
#include <iostream>
using namespace std;
#include <string>
#include <vector>
//相邻重复元素算法
void test()
{
vector<int>v;
v.push_back(12);
v.push_back(13);
v.push_back(1);
v.push_back(1);
v.push_back(1);
v.push_back(15);
v.push_back(15);
v.push_back(12);
v.push_back(15);
v.push_back(14);
v.push_back(14);
vector<int>::iterator it=adjacent_find(v.begin(), v.end());
if (it == v.end())
{
cout << "no" << endl;
}
else
{
cout << *it << endl;
}
}
int main()
{
test();
//myprint mpp;
//doprint(mpp, "aaaa");
}
#include <iostream>
using namespace std;
#include <string>
#include <vector>
//查找元素是否存在 二分查找法
void test()
{
vector<int>v;
for (int a = 0; a < 10; a++)
{
v.push_back(a);
}
sort(v.begin(), v.end(), greater<int>());//greater<int>() 是内建排序函数
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << endl;
}
//binary_search 必须是有序的序列 !!!!必须是由小到大
bool a=binary_search(v.begin(), v.end(),2);
if (a)
{
cout << "yes" << endl;
}
else
{
cout << "no" << endl;
}
};
int main()
{
test();
//myprint mpp;
//doprint(mpp, "aaaa");
}
#include <iostream>
using namespace std;
#include <string>
#include <vector>
//统计元素个数
void test()
{
vector<int>v;
for (int a = 0; a < 10; a++)
{
v.push_back(a);
}
v.push_back(0);
v.push_back(0);
v.push_back(1);
int num=count(v.begin(), v.end(), 10);
cout << "10 num:" << num << endl;
}
int main()
{
test();
//myprint mpp;
//doprint(mpp, "aaaa");
}
#include <iostream>
using namespace std;
#include <string>
#include <vector>
//按条件统计元素个数
class equ10
{
public:
bool operator()(int a)
{
return a >0;
}
};
void test()
{
vector<int>v;
for (int a = 0; a < 10; a++)
{
v.push_back(a);
}
int num = count_if(v.begin(), v.end(), equ10());
cout << num << endl;
}
int main()
{
test();
//myprint mpp;
//doprint(mpp, "aaaa");
}
#include <iostream>
using namespace std;
#include <string>
#include <vector>
//常用的排序算法
void myprint(int a)
{
cout << a << endl;
}
void test()
{
vector<int>v;
v.push_back(12);
v.push_back(13);
v.push_back(1);
v.push_back(1);
v.push_back(15);
v.push_back(14);
v.push_back(14);
sort(v.begin(), v.end());//默认升序
for_each(v.begin(), v.end(), myprint);
sort(v.begin(), v.end(),greater<int>());//内建函数降序
for_each(v.begin(), v.end(), myprint);
//随机打乱顺序
//srand((unsigned int)time(NULL));//没有种子就每次打乱的顺序都一样
random_shuffle(v.begin(), v.end());
for_each(v.begin(), v.end(), myprint);
//合并算法
//!!!!!!!要求是有序的容器
vector<int>v3;
vector<int>v4;
for (int a = 0; a < 10; a++)
{
v3.push_back(a);
v4.push_back(a+1);
}
vector<int>v5;
v5.resize(v3.size() + v4.size());
merge(v3.begin(), v3.end(), v4.begin(), v4.end(), v5.begin());// 合并之后还是有序容器升序
for_each(v5.begin(),v5.end(), myprint);
reverse(v5.begin(), v5.end());///反转顺序
for_each(v5.begin(), v5.end(), myprint);
}
int main()
{
test();
//myprint mpp;
//doprint(mpp, "aaaa");
}
#include <iostream>
using namespace std;
#include <string>
#include <vector>
//拷贝 替换
void myprint(int val)
{
cout << val << endl;
}
class greaterfive
{
public:
bool operator()(int val)
{
return val > 5;
}
};
void test()
{
vector<int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
for_each(v.begin(), v.end(), myprint);
vector<int>v2;
v2.resize(v.size());
copy(v.begin(), v.end(), v2.begin());//拷贝函数
for_each(v2.begin(), v2.end(), myprint);
/*for (vector<int>::iterator it = v2.begin(); it != v.end(); it++)
{
cout << *it << endl;
}*/
replace(v.begin(), v.end(), 1, 1000);//替换元素函数 替换所有的1为1000
for_each(v.begin(), v.end(), myprint);
replace_if(v.begin(), v.end(), greaterfive(), 10000);//条件替换函数 需要谓词
for_each(v.begin(), v.end(), myprint);
swap(v, v2);//替换两个容器
for_each(v.begin(), v.end(), myprint);
}
int main()
{
test();
//myprint mpp;
//doprint(mpp, "aaaa");
}
#include <iostream>
using namespace std;
#include <string>
#include <vector>
//算数生成算法
//求和
void myprint(int val)
{
cout << val << endl;
}
void test()
{
vector<int>v;
for (int i = 0; i <= 10; i++)
{
v.push_back(i);
}
int a=accumulate(v.begin(),v.end(),1);//最后的数字是 初始累加值
cout << a << endl;
//fill(v.begin()+5 , v.end(), 10000);//填充函数
//for_each(v.begin(), v.end(), myprint);
vector<int>v1;
for (int i = 0; i <10; i++)
{
v1.push_back(i+5);
}
vector<int>v2;
v2.resize(min(v.size(),v1.size()));
vector<int>::iterator itend = set_intersection(v.begin(), v.end(), v1.begin(), v1.end(), v2.begin());//交集,两个容器必须是有序的
//for_each(v2.begin(), itend, myprint);
vector<int>v3;
v3.resize(v.size() + v1.size());
vector<int>::iterator itunion = set_union(v.begin(), v.end(), v1.begin(), v1.end(), v3.begin());//并集 两个容器必须是有序的
for_each(v3.begin(), itunion, myprint);
vector<int>v4;
v4.resize(max(v.size(), v1.size()));
vector<int>::iterator itdifference = set_difference(v.begin(), v.end(), v1.begin(), v1.end(), v4.begin());//v和v1的差集 两个容器必须是有序的
for_each(v4.begin(), itdifference, myprint);
vector<int>::iterator itdifference1 = set_difference(v1.begin(), v1.end(), v.begin(), v.end(), v4.begin());//v1和v的差集
for_each(v4.begin(), itdifference1, myprint);
}
int main()
{
test();
//myprint mpp;
//doprint(mpp, "aaaa");
}
C++0324
于 2022-03-24 21:10:33 首次发布