C++之STL(六七)

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【HarmonyOS】模拟器一直停留在开机页面,无法进入手机桌面

环境:window 10, 开发者工具:DevEco Studio NEXT Developer Beta1 Build #DS-233.14475.28.36.503402 Build Version: 5.0.3.402, built on June 16, 2024 Runtime version: 17.0.101-b1087.17 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 10.0 GC: G1 Y…

【Dison夏令营 Day 01】如何用Python写一个游戏“石头剪刀布”

欢迎你们踏入这个充满无限可能性的编程世界&#xff01;作为一名热爱Python的开发者&#xff0c;我深感编程的魅力&#xff0c;并希望与你们一同分享这份乐趣和激情。编程&#xff0c;不仅仅是一种技能&#xff0c;更是一种思维方式和解决问题的工具。在Python的世界里&#xf…

Linux内核中网络数据的流量控制(TC: Traffic control 和 QDISC)

(个人能力有限&#xff0c;本文如有错误之处&#xff0c;欢迎交流指正) 1 简介 在进行网络数据 接收 和 发送 过程中&#xff0c;网卡设备到L3(网络层) 中间会经历流量控制(Traffic control)。 《BPF之巅.洞悉Linux系统和应⽤性能》P413 qdisc这个可选层可以⽤来管理⽹络包的…

【博士每天一篇文献-综述】Biological underpinnings for lifelong learning machines

阅读时间&#xff1a;2023-12-17 1 介绍 年份&#xff1a;2015 作者&#xff1a;Dhireesha Kudithipudi&#xff0c;Mario Aguilar-Simon&#xff0c;其中通讯作者Josh Bongard教授也是另一篇论文的通讯作者《Neural modularity helps organisms evolve to learn new skills …

智慧校园-缴费管理系统总体概述

在构建现代化教育环境的过程中&#xff0c;智慧校园缴费管理系统脱颖而出&#xff0c;成为提升校园财务管理效率与服务质量的关键一环。缴费管理系统需要精心设计&#xff0c;通过科技力量&#xff0c;让原本繁琐的缴费流程变得简单快捷&#xff0c;同时增强家校之间的互动与信…

通过代理从ARDUINO IDE直接下载开发板包

使用免费代理 实现ARDUINO IDE2.3.2 下载ESP8266/ESP32包 免费代理 列表 测试代理是否可用的 网站 有时&#xff0c;代理是可用的&#xff0c;但依然有可能找不到开发板管理器的资料包。 可以多换几个代理试试。 代理的配置 文件 -> 首选项 -> 网络 进入后做如下配置…

linux 安装腾讯会议和解决ubuntu打开腾讯会议提示:不兼容 wayland 协议

一. 下载腾讯会议安装包 腾讯会议下载链接 二. 命令行安装 cd [安装包路径] sudo dpkg -i TencentMeeting_0300000000_3.19.1.400_x86_64_default.publish.deb 三. 打开腾讯会议提示无法支持wayland 协议 解决方法: 打开终端 sudo vi /etc/gdm3/custom.conf打开 #Wayland…

Zabbix 监控系统部署

Zabbix 监控系统部署 Zabbix是一个企业级开源分布式监控解决方案&#xff0c;可监控网络的众多参数以及服务器、虚拟机、应用程序、服务、数据库、网站、云等的运行状况和完整性。 Zabbix 使用灵活的通知机制&#xff0c;允许用户为几乎任何事件配置基于电子邮件的警报。这允许…

Linux-笔记 嵌入式gdb远程调试

目录 前言 实现 1、内核配置 2、GDB移植 3、准备调试程序 4、开始调试 前言 gdb调试器是基于命令行的GNU项目调试器&#xff0c;通过gdb工具我们可以实现许多调试手段&#xff0c;同时gdb支持多种语言&#xff0c;兼容性很强。 在桌面 Linux 系统&#xff08;如 Ubuntu、Cent…

从新手到高手:彻底掌握MySQL表死锁

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 从新手到高手&#xff1a;彻底掌握MySQL表死锁 前言什么是死锁mysql死锁的原因1. 互斥资源的竞争…

加速鸿蒙生态共建,蚂蚁mPaaS助力鸿蒙原生应用开发创新

6月21日-23日&#xff0c;2024华为开发者大会&#xff08;HDC 2024&#xff09;如期举行。在22日的【鸿蒙生态伙伴SDK】分论坛中&#xff0c;正式发布了【鸿蒙生态伙伴SDK市场】&#xff0c;其中蚂蚁数科旗下移动开发平台mPaaS&#xff08;以下简称&#xff1a;蚂蚁mPaaS&#…

科林Linux7_网络爬虫

一、爬虫 网络资源的下载工具&#xff0c;工作与万维网环境&#xff0c;持续获取网页网站中的网络信息。可持续的数据采集机器人 1、搜索引擎技术使用爬虫 2、数据分析、数据挖掘领域&#xff0c;需要爬虫进行数据准备 3、数据批处理、采集&#xff0c;大量获取某些网站中的…

学习笔记(linux高级编程)7

2._exit 系统调用 void _exit(int status); 功能: 让进程退出,不刷新缓存区 参数: status:进程退出状态 返回值: 缺省 回调函数 3.atexit int atexit(void (*function)(void)); 功能: 注册进程退出前执行的函数 参数: function:函数指针 指向void返回值void参数的函数指针 返…

14、电科院FTU检测标准学习笔记-录波功能2

作者简介&#xff1a; 本人从事电力系统多年&#xff0c;岗位包含研发&#xff0c;测试&#xff0c;工程等&#xff0c;具有丰富的经验 在配电自动化验收测试以及电科院测试中&#xff0c;本人全程参与&#xff0c;积累了不少现场的经验 ———————————————————…

优思学院|工厂的部门架构管理与精益生产

工厂内有不同部门&#xff0c;各部门之间必须协调合作才能发挥整体功能。工厂最主要的部分是制造产品的现场&#xff0c;这里安装了生产工具&#xff0c;还有操作员进行加工或生产制造。 制造时使用的材料或零组件&#xff0c;需要对外采购。对于加工组装型的工厂&#xff0c;…

MMCV【mmclassification】 从0到1 之 Docker 容器环境搭建步骤总结

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 📙 Linux 下 Docker 安装环境检查Docker 安装 [ root 或者 sudo 权限用户可安装 ]给 普通用户 加入 Docker …

【新闻】技术工种魅力大增,美国Z世代职场新出路

美国需要更多水管工&#xff0c;Z世代正在响应这一号召。 长期受到劳动力短缺困扰的技工行业&#xff0c;如今对美国最年轻的就业群体产生新的吸引力&#xff0c;他们中许多人正选择放弃读大学。随着从焊接到机械加工等领域出现技术迭代&#xff0c;薪资正在上涨&#xff0c;这…

第4章 客户端-客户端管理

1. 客户端API 1.1client list client list命令能列出与Redis服务端相连的所有客户端连接信息。 127.0.0.1:6379> client list id254487 addr10.2.xx.234:60240 fd1311 name age8888581 idle8888581 flagsN db0 sub0 psub0 multi-1 qbuf0 qbuf-free0 obl0 oll0 omem0 events…

SpringBoot启动出错:无法访问org.springframework.boot.autoconfigure.SpringBootApplication

无法访问org.springframework.boot.autoconfigure.SpringBootApplication类文件具有错误的版本 61.0&#xff0c;应为 52.0请删除该文件或确保该文件位于正确的类路径子目录中。 出现该问题是由于版本不兼容&#xff0c; 在pom.xml文件中&#xff0c;修改版本为2开头即可

抖音营销新策略:MessageBox与HubSpot集成,引领企业获客新潮流

在全球数字化浪潮中&#xff0c;抖音以其独特的短视频形式、庞大的用户群体和高度互动性&#xff0c;成为了企业出海战略中不可或缺的一环。抖音营销不仅仅是简单的内容发布和互动&#xff0c;它更是一种深度策略和创新思维的体现。今天将深入探讨抖音营销的核心价值、应用场景…