C++0324

#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");
}









  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值