ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

C++常用遍历算法---for_each、transform

2026/9/25 22:49:49 拓冰建站 浏览量
C++常用遍历算法---for_each、transform

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岁了!
*/