C++之STL(六七)

news2024/12/23 20:56:48

1、变动性算法

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

using namespace std;

void print_element(int n)
{
    cout << n << ' ';
}

void add_3(int& n)
{
    n = n + 3;
}

int fun(int n)
{
    return 2 * n;
}

bool func(int n)
{
    return n < 10;
}
int main() {
    int a[] = {1, 2, 3, 4, 5};
    vector<int> v(a, a+5);

    // 这个for_each会不会改动到原数据取决于你在函数中怎么实现,因为源码中返回的是一个reference引用
    for_each(v.begin(), v.end(), print_element);
    cout << endl;

    for_each(v.begin(), v.end(), add_3);

    for_each(v.begin(), v.end(), print_element);
    cout << endl;

    list<int> l(15);
    for_each(l.begin(), l.end(), print_element);
    cout << endl;

    // copy其实就是for循环从begin到end,然后将里面的值赋值给第三个参数
    // 注意:第三个参数的空间必须是已经存在的,copy不会再分配空间
    copy(v.begin(), v.end(), l.begin());
    for_each(l.begin(), l.end(), print_element);
    cout << endl;

    // 从末尾开始拷贝
    copy_backward(v.begin(), v.end(), l.end());
    for_each(l.begin(), l.end(), print_element);
    cout << endl;

    list<int> l2(5);
    transform(v.begin(), v.end(), l2.begin(), fun);
    for_each(l2.begin(), l2.end(), print_element);
    cout << endl;

    // 替换
    vector<int> v2(a, a+5);
    replace(v2.begin(), v2.end(), 3, 13);
    for_each(v2.begin(), v2.end(), print_element);
    cout << endl;

    // 在拷贝的过程中替换(原数据不变,目标改变)
    vector<int> v3(a, a+5);
    list<int> l3(5);
    replace_copy(v3.begin(), v3.end(), l3.begin(), 13, 3);
    for_each(v3.begin(), v3.end(), print_element);
    cout << endl;

    for_each(l3.begin(), l3.end(), print_element);
    cout << endl;

    // 在拷贝的过程中执行某个动作
    replace_copy_if(v.begin(), v.end(), l3.begin(), func, 0);
    for_each(l3.begin(), l3.end(), print_element);
    cout << endl;
    return 0;
}

// 输出
1 2 3 4 5
4 5 6 7 8
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4 5 6 7 8 0 0 0 0 0 0 0 0 0 0
4 5 6 7 8 0 0 0 0 0 4 5 6 7 8
8 10 12 14 16
1 2 13 4 5
1 2 3 4 5
1 2 3 4 5
0 0 0 0 0

2、其他算法

#include <iostream>
using namespace std;

#include <algorithm>
#include <vector>
#include <numeric>

void print_element(int n)
{
    cout << n << ' ';
}

int mult(int a, int b)
{
    return a * b;
}

int main() {
    int a[] = {1, 3, 7,2, 3, 4, 5, 6, 7};
    vector<int> v(a, a + 9);

    for_each(v.begin(), v.end(), print_element);
    cout << endl;

    // 移除值为3
    // 首先查找给定第一个位置,然后遍历后面的元素,如果遇到要删除的元素,删除该元素
    // 然后将非删除的元素拷贝到前面,覆盖到前面的元素
    remove(v.begin(), v.end(), 3);
    for_each(v.begin(), v.end(), print_element);
    cout << endl;

    //如果要把里面的值删除
    int b[] = {1, 3, 7,2, 3, 4, 5, 6, 7};
    vector<int> v1(b, b + 9);
    v1.erase(remove(v1.begin(), v1.end(), 3), v1.end());
    for_each(v1.begin(), v1.end(), print_element);
    cout << endl;

    int c[] = {1, 2, 3, 4, 5, 6};
    vector<int> v2(c, c + 6);
    rotate(v2.begin(), v2.begin() + 2, v2.end());
    for_each(v2.begin(), v2.end(), print_element);
    cout << endl;

    // 排序
    sort(v2.begin(), v2.end());
    for_each(v2.begin(), v2.end(), print_element);
    cout << endl;

    // 已序区间排序
    int d[] = {1, 10, 10, 14, 15, 16};
    vector <int> v3(d, d + 6);
    vector<int>::iterator it;
    it = lower_bound(v3.begin(), v3.end(), 10);
    if(it != v3.end())
    {
        cout << it - v3.begin() << endl;
    }

    it = upper_bound(v3.begin(), v3.end(), 10);
    if(it != v3.end())
    {
        cout << it - v3.begin() << endl;
    }

    // 数值算法
    int e[] = {1, 2, 3, 4, 5};
    vector <int> v4(e, e + 5);
    for_each(v4.begin(), v4.end(), print_element);
    cout << endl;
    // 累加
    cout << accumulate(v4.begin(), v4.end(), 1) << endl;
    // 累乘
    cout << accumulate(v4.begin(), v4.end(), 1, mult) << endl;
    return 0;
}

// 输出
1 3 7 2 3 4 5 6 7
1 7 2 4 5 6 7 6 7
1 7 2 4 5 6 7
3 4 5 6 1 2
1 2 3 4 5 6
1
3
1 2 3 4 5
16
120

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1857463.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

麻了!一觉醒来,代码全挂了。。

作为⼀名程序员&#xff0c;相信大家平时都有代码托管的需求。 相信有不少同学或者团队都习惯把自己的代码托管到GitHub平台上。 但是GitHub大家知道&#xff0c;经常在访问速度这方面并不是很快&#xff0c;有时候因为网络问题甚至根本连网站都打不开了&#xff0c;所以导致…

python创建websocket服务器,实现循环发送消息

WebSocket协议是在2008年由Web应用程序设计师和开发人员创建的&#xff0c;目的是为了在Web浏览器和服务器之间提供更高效、更低延迟的双向通信。它允许客户端和服务器在任何时候发送消息&#xff0c;无需重新建立TCP连接。WebSocket可以在Web浏览器和服务器之间传输文本和二进…

Linux命令----wc,uniq,sort的用法

1.wc的用法&#xff1a;wc 命令用于计算文件中的行数、单词数和字节数。 常用选项 -l&#xff1a;只显示行数-w&#xff1a;只显示单词数-c&#xff1a;只显示字节数-m&#xff1a;只显示字符数&#xff08;与 -c 类似&#xff0c;但处理多字节字符&#xff09;-L&#xff1a…

吴恩达机器学习 第三课 week1 无监督学习算法(下)

目录 01 学习目标 02 异常检测算法 2.1 异常检测算法的概念 2.2 基于高斯模型的异常检测 03 利用异常检测算法检测网络服务器的故障 3.1 问题描述 3.2 算法实现 3.3 问题升级 04 总结 01 学习目标 &#xff08;1&#xff09;理解异常检测算法&#xff08;Anomaly Det…

线程也不是越多越好,多少是好?

前面我们评估了不同大小基因组构建索引所需的计算资源和时间资源和不同大小数据集比对所需的计算资源和时间资源。 下面我们进一步看下不同线程数的影响。 测试电脑配置 这是一个10核、20线程的处理器&#xff0c;主频2.8 G HZ&#xff0c;可超频到5.2 GhZ。 在Windows系统…

windows系统上nginx搭建文件共享

1、下载windows版nginx 下载地址 2、配置nginx 编辑nginx.conf配置文件 在http模块下添加这个参数 underscores_in_headers on;#修改location内容&#xff0c;共享哪个文件夹&#xff0c;就写哪个文件夹&#xff0c;最后一定要跟上/&#xff0c;否则无法访问 location / {…

Java内存模型中的“可见性”、“原子性”、“有序性”,它们如何影响多线程程序的行为?

在Java内存模型&#xff08;Java Memory Model, JMM&#xff09;中&#xff0c;“可见性”、“原子性”和“有序性”是确保多线程程序正确执行的三个核心概念。它们直接影响到多线程环境下数据的一致性和程序的行为。 可见性&#xff08;Visibility&#xff09; 概念&#xf…

Android 大话binder通信 (下)

戳蓝字“牛晓伟”关注我哦&#xff01; 用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章 前情提要 Android 大话binder通信 (上)主要介绍了矮挫丑进程一直暗恋白富美进程&#xff0c;遂发送情书给她&#xff0c;以表达对她的爱慕之情&#xff0c;而情书顺利的到达…

NFTScan | 06.17~06.23 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2024.06.17~ 2024.06.23 NFT Hot News 01/ Slerf 将向其 NFT 持有者空投&#xff0c;快照将在几小时内拍摄 6 月 17 日&#xff0c;Slerf 宣布将为其 NFT 持有者准备空投&#xff0c;快…

[C++]24:异常和智能指针

异常和智能指针 一.异常1.C/C的错误&#xff1a;1.C2.C3.三个关键字&#xff1a; 2.使用异常&#xff1a;1.基本概念&#xff1a;2.基本代码&#xff1a;1.基本使用&#xff1a;2.多个捕获&#xff1a;3.任意类型异常的捕获&#xff1a;4.异常的重新抛出&#xff1a; 3.异常安全…

RK3568技术笔记十八 Linux GPIO驱动程序中设备树分析

这段代码是RK3568芯片的设备树&#xff08;Device Tree&#xff09;片段&#xff0c;用于描述GPIO控制器的配置。 pinctrl: pinctrl { compatible "rockchip,rk3568-pinctrl"; // 兼容性字符串&#xff0c;指定此设备树节点适用于RK3568的引脚控制器 rockchip,grf…

汽车信息安全--HSM和TEE的区别

目录 HSM TEE TEE 和 HSM 技术特点与主要应用场景 TEE 和 HSM 相结合的方案 TEE 和 HSM 在车端的分布 HSM HSM指Hardware Security Module&#xff0c;它是一种有自己独立的CPU、密码算法硬件加速器、独立Flash等&#xff0c;用于生成、存储和管理加密密钥&#xff0c;以…

2024年商业管理与金融创新国际会议(BMFI 2024)

2024年商业管理与金融创新国际会议&#xff08;BMFI 2024&#xff09; 2024 International Conference on Business Management and Financial Innovation 【重要信息】 大会地点&#xff1a;上海 大会官网&#xff1a;http://www.icbmfi.com 投稿邮箱&#xff1a;icbmfisub-co…

高并发cn.hutool.http.HttpRequest请求优化

高并发cn.hutool.http.HttpRequest请求优化 文章目录 高并发cn.hutool.http.HttpRequest请求优化优化方向Async线程池管理Http请求处理流程Tomcat接收到请求后的处理流程Tomcat的线程分配和管理方案一方案二方案三如何启用Spring Boot Actuator 优化方向 Async线程池管理 使用…

用户态协议栈06-TCP三次握手

最近由于准备软件工程师职称考试&#xff0c;然后考完之后不小心生病了&#xff0c;都没写过DPDK的博客了。今天开始在上次架构优化的基础上增加TCP的协议栈流程。 什么是TCP 百度百科&#xff1a;TCP即传输控制协议&#xff08;Transmission Control Protocol&#xff09;是…

24 常用到的截图工具

1 语录 从此世界在我面前&#xff0c; 指向着我想去的任何地方&#xff0c; 我完全而绝对的主持着我 定义&#xff1a; 截图是将计算机屏幕上的当前显示内容保存为图片文件的行为。 概念&#xff1a; 全屏截图&#xff1a;捕捉整个屏幕的截图。区域截图&#xff1a;选择屏幕上…

【第十四课】区域经济可视化——标注

一、前言 地图上说明图面要素的名称、质量与数量特征的文字或数字&#xff0c;统称为地图 注记。只有图形符号而没有注记符号的地图&#xff0c;只能是一种令人费解的 “盲图”。 地图上的注记分为名称注记、说明注记和数字注记三种。名称注记用于说明各 种事物的专有名称&…

怎么使用RSI指标分析现货黄金行情走势?

拿到一波现货黄金行情走势&#xff0c;如何着手对其进行分析呢&#xff1f;投资者只要在网络上搜索一下&#xff0c;保管能够找到各种各样的答案&#xff0c;而本文要讨论的就是其中一种&#xff0c;我们借助RSI指标进行分析。 RSI就是相对强弱指标的简称&#xff0c;这是市场中…

车间现场管理那些事

在制造企业中&#xff0c;车间现场管理是至关重要的一环。车间现场管理包括了对生产设备、生产过程、产品质量以及员工行为的管理。有效的车间现场管理能够提高生产效率&#xff0c;降低成本&#xff0c;提高产品质量&#xff0c;并且能够保障员工的安全。那么&#xff0c;车间…

License简介和Licensecc的使用

License简介和Licensecc的使用 License简介什么是LIcense简易License制作加密扫盲对称加密非对称加密 Licensecc使用构建和编译在linux上进行编译UbuntuCentOS 7CentOS 8下载并编译配置编译和测试cmake 后可以跟的参数在Linux上为Windows进行交叉编译 在windos上进行编译MSVC (…