C++常用遍历算法---for_each、transform
2024-01-02 17:10:05
C++常用遍历算法—for_each、transform
1、for_each—遍历容器
1.1 内置数据类型
void print1(int num)
{
cout << "这个数字是:" << num << endl;
}
void test1()
{
vector<int> numList;
for (int i = 0; i < 10; i++)
{
numList.push_back(i);
}
for_each(numList.begin(), numList.end(), print1);
}
/*
这个数字是:0
这个数字是:1
这个数字是:2
这个数字是:3
这个数字是:4
这个数字是:5
这个数字是:6
这个数字是:7
这个数字是:8
这个数字是:9
*/
1.2 自定义数据类型
class Person
{
public:
string name;
int age;
Person(string name, int age)
{
this->name = name;
this->age = age;
}
Person() {}
};
void printPerson(Person &p)
{
cout << p.name << "今年" << p.age << "岁了!" << endl;
}
void test2()
{
Person p1("ncs", 26);
Person p2("nbl", 9);
Person p3("zes", 51);
vector<Person> pList;
pList.push_back(p1);
pList.push_back(p2);
pList.push_back(p3);
for_each(pList.begin(), pList.end(), printPerson);
}
/*
ncs今年26岁了!
nbl今年9岁了!
zes今年51岁了!
*/
2、transform—搬运一个容器的内容到另一个容器
2.1 自定义数据类型
int re(int num)
{
return num + 10000;
}
// 内置数据类型
void test3()
{
// 原容器
vector<int> numList;
for (int i = 0; i < 10; i++)
{
numList.push_back(i);
}
//目标容器
vector<int>vTarget;
for (int i = 0; i < 10; i++)
{
vTarget.push_back(i);
}
for_each(vTarget.begin(), vTarget.end(), print1); // 打印
vTarget.resize(vTarget.size() + numList.size()); // 目标容器需提前开辟空间
transform(numList.begin(), numList.end(), vTarget.begin()+numList.size(), re);
cout << "++++++++++++++++++++++\n";
for_each(vTarget.begin(), vTarget.end(), print1); // 打印
}
/*
这个数字是:0
这个数字是:1
这个数字是:2
这个数字是:3
这个数字是:4
这个数字是:5
这个数字是:6
这个数字是:7
这个数字是:8
这个数字是:9
++++++++++++++++++++++
这个数字是:0
这个数字是:1
这个数字是:2
这个数字是:3
这个数字是:4
这个数字是:5
这个数字是:6
这个数字是:7
这个数字是:8
这个数字是:9
这个数字是:10000
这个数字是:10001
这个数字是:10002
这个数字是:10003
这个数字是:10004
这个数字是:10005
这个数字是:10006
这个数字是:10007
这个数字是:10008
这个数字是:10009
*/
2.2 自定义数据类型
// 自定义数据类型
Person ageAdd(Person& p)
{
p.age = p.age + 30;
return p;
}
void test4()
{
Person p1("ncs", 26);
Person p2("nbl", 9);
Person p3("zes", 51);
vector<Person> pList;
pList.push_back(p1);
pList.push_back(p2);
pList.push_back(p3);
vector<Person> pList1;
pList1.push_back(p1);
pList1.push_back(p2);
pList1.push_back(p3);
for_each(pList.begin(), pList.end(), printPerson);
pList.resize(pList.size() + pList1.size());
transform(pList1.begin(), pList1.end(), pList.begin() + pList1.size(), ageAdd);
cout << "++++++++++++++++++++++\n";
for_each(pList.begin(), pList.end(), printPerson);
}
/*
ncs今年26岁了!
nbl今年9岁了!
zes今年51岁了!
++++++++++++++++++++++
ncs今年26岁了!
nbl今年9岁了!
zes今年51岁了!
ncs今年56岁了!
nbl今年39岁了!
zes今年81岁了!
*/
文章来源:https://blog.csdn.net/nibidal/article/details/135342758
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!