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

发布时间:2024年01月02日

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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。