详解C++中的全局算法

全局算法

在C++中,全局算法通常指的是不依赖于特定数据结构或对象,而是可以在各种数据集合上使用的通用 算法。这些算法通常定义在标准模板库(STL)中,因此可以在整个程序中重复使用,适用于多种数据 类型。STL中的算法可以作用于数组、向量、列表、集合、映射等容器。使用这些算法时,通常需要包 含头文件 <algorithm>。

(1)遍历算法

std::for_each

std::for_each 算法用于对容器中的每个元素执行指定的函数或操作。它接受一个迭代器范围(开始和 结束迭代器)和一个函数对象(可以是函数指针、lambda表达式或函数对象类实例)。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
void Double(int &n)
{
    n *= 2;
}
int main()
{
    std::vector<int> v{ 1, 2, 3, 4, 5 };
    std::for_each(v.begin(), v.end(), Double);//函数指针
    std::for_each(v.begin(), v.end(), [](int n) { std::cout << n << ' ';});//lambda表达式
    std::cout << std::endl;
    return 0;
}

std::copy

std::copy 算法用于将一个容器中的元素复制到另一个容器中。它同样接受一个迭代器范围和一个输出 迭代器,用于指定复制的目标位置

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

int main()
{
    std::vector<int> source{ 1, 2, 3, 4, 5 };
    std::vector<int> destination;
    destination.resize(source.size());
    std::copy(source.begin(), source.end(), destination.begin());

    for (int n : destination)
    {
        std::cout << n << ' ';
    }
    std::cout << std::endl;
return 0;
}

std::transform

std::transform 算法用于对容器中的每个元素应用一个函数或操作,并将结果存储在另一个容器中。 它类似于 std::for_each ,但还允许你指定一个输出迭代器来存储转换后的结果。

#include <iostream>
#include <vector>
#include <algorithm>

int Double(int n)
{
    return n * 2;
}
    
int main() {

std::vector<int> v{ 1, 2, 3, 4, 5 };
std::vector<int> result;
result.resize(v.size());
std::transform(v.begin(), v.end(), result.begin(), [](int n) { return n * 2;});

    for (int n : result) {
        std::cout << n << ' ';
    }

std::cout << std::endl;
std::transform(result.begin(), result.end(), result.begin(), Double);

    for (int n : result) {
        std::cout << n << ' ';
    }
std::cout << std::endl;

return 0;
}

std::replace 和 std::replace_if

std::replace 算法用于将容器中所有等于给定值的元素替换为另一个值。而 std::replace_if 则根据 指定的条件来替换元素。

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    std::vector<int> v{ 1, 2, 3, 2, 5 };
    std::replace(v.begin(), v.end(), 2, 10); // 将所有2替换为10
    
    for (int n : v)
    {
        std::cout << n << ' ';
    }

    std::cout << std::endl;
    std::replace_if(v.begin(), v.end(), [](int n) { return n % 2 == 0; }, 20);
    // 将所有偶数替换为20

    for (int n : v)
    {
        std::cout << n << ' ';
    }
    std::cout << std::endl;
return 0;
}

(2)查找算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值