C++学习笔记(三十八)——STL之修改算法

STL 算法分类:

类别常见算法作用
排序sortstable_sortpartial_sortnth_element排序
搜索findfind_ifcountcount_ifbinary_search查找元素
修改copyreplacereplace_ifswapfill修改容器内容
删除removeremove_ifunique删除元素
归约for_eachaccumulate处理数据
合并mergeset_unionset_intersection处理有序序列
排列组合next_permutationprev_permutation生成排列
堆操作push_heappop_heapmake_heapsort_heap处理堆

STL 修改算法

在 C++ 标准库(STL)中,修改算法可以在容器中应用特定的操作,如修改元素的值、替换值、插入新元素等。
修改算法通常返回容器的迭代器,指示修改的位置或结果。

算法名称功能描述时间复杂度空间复杂度适用场景
fill用指定的值填充容器中的所有元素O(n)O(1)填充容器的所有元素
fill_n用指定的值填充容器中的部分元素O(n)O(1)填充容器的部分元素
copy将一个范围内的元素复制到另一个范围中O(n)O(1)将容器中的元素复制到另一个容器
swap交换两个元素的值O(1)O(1)交换两个元素或两个容器的内容
replace替换容器中所有指定值的元素O(n)O(1)替换容器中的指定值
replace_if替换容器中所有满足条件的元素O(n)O(1)根据条件替换容器中的元素
transform对容器中每个元素应用操作并存储结果O(n)O(1)对容器中每个元素进行变换
rotate将给定范围内的元素旋转指定次数O(n)O(1)容器中元素的旋转操作

(1)fill

  • 功能:用指定的值填充容器中的所有元素。
  • 时间复杂度O(n),其中 n 是容器的元素数量。
  • 空间复杂度O(1),原地操作。

示例:

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>int main() {vector<int> vec(5, 0);  // 初始化为5个0fill(vec.begin(), vec.end(), 10);  // 将所有元素修改为10for (int x : vec){cout << x << " ";  // 输出:10 10 10 10 10}cout << endl;system("pause");return 0;
}

注意:

  • fill适用于,当需要用相同的值填充整个容器时。

(2)fill_n

  • 功能:从指定位置开始填充指定数量的元素为给定值。
  • 时间复杂度O(n),其中 n 是填充的元素数量。
  • 空间复杂度O(1),原地操作。

示例:

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>int main() {vector<int> vec(5, 0);fill_n(vec.begin(), 3, 10);  // 将前3个元素填充为10for (int x : vec){cout << x << " ";  // 输出:10 10 10 0 0}cout << endl;system("pause");return 0;
}

注意:

  • fill_n适用于,当需要填充容器的部分元素时。

(3)copy

  • 功能:将一个范围内的元素复制到另一个范围中。
  • 时间复杂度O(n),其中 n 是源范围中的元素数量。
  • 空间复杂度O(1),原地操作。

示例:

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>int main() {vector<int> src = { 1, 2, 3, 4, 5 };vector<int> dest(5);// 将 src 中的元素复制到 dest 中copy(src.begin(), src.end(), dest.begin());cout << "复制的vector: ";for (int val : dest) {cout << val << " ";}cout << endl;system("pause");return 0;
}

注意:

  • copy用于将一个容器中的元素复制到另一个容器,或从一个容器复制到数组等。

(4)swap

  • 功能:交换两个变量或容器中的元素。
  • 时间复杂度O(1),它直接交换两个元素,不涉及其他复杂操作。
  • 空间复杂度O(1),原地操作。

示例:

#include <iostream>
using namespace std;
#include <algorithm>int main() {int a = 5, b = 10;// 交换 a 和 b 的值swap(a, b);cout << "a = " << a << ", b = " << b << endl;system("pause");return 0;
}

注意:

  • swap适用于,当需要交换两个元素或两个容器的内容时。

(5)replace

  • 功能:将容器中所有等于指定值的元素替换为新值。
  • 时间复杂度O(n),其中 n 是容器的元素数量。
  • 空间复杂度O(1),原地操作。

示例:

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>int main() {vector<int> vec = { 1, 2, 3, 2, 5 };replace(vec.begin(), vec.end(), 2, 10);  // 将所有2替换为10for (int x : vec){cout << x << " ";  // 输出:1 10 3 10 5}cout << endl;system("pause");return 0;
}

注意:

  • replace适用于,当需要将容器中的指定值替换为其他值时。

(6)replace_if

  • 功能:将容器中所有满足条件的元素替换为新值。
  • 时间复杂度O(n),其中 n 是容器的元素数量。
  • 空间复杂度O(1),原地操作。

示例:

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>bool is_odd(int n)
{return n % 2 != 0;
}int main() {vector<int> vec = { 1, 2, 3, 4, 5 };replace_if(vec.begin(), vec.end(), is_odd, 10);  // 将所有奇数替换为10for (int x : vec){cout << x << " ";  // 输出:10 2 10 4 10}cout << endl;system("pause");return 0;
}

注意:

  • replace_if适用于,当需要根据某种条件替换容器中元素时。

(7)transform

  • 功能:对容器中的每个元素应用指定的操作,并将结果存储到目标容器中。
  • 时间复杂度O(n),其中 n 是容器的元素数量。
  • 空间复杂度O(1)

示例:

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>int square(int n)
{return n * n;
}int main() {vector<int> vec = { 1, 2, 3, 4, 5 };vector<int> result(vec.size());transform(vec.begin(), vec.end(), result.begin(), square);for (int x : result){cout << x << " ";  // 输出:1 4 9 16 25}cout << endl;system("pause");return 0;
}

注意:

  • transform适用于,当需要对容器中的每个元素进行某些变换时。

(8)rotate

  • 功能:将范围内的元素旋转指定次数(左旋/循环左移)。
  • 时间复杂度O(n),其中 n 是范围中的元素数量。
  • 空间复杂度O(1),原地操作。

示例:

#include <iostream>
#include <algorithm>  // std::rotate
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 将 vec 中的元素旋转 2 次std::rotate(vec.begin(), vec.begin() + 2, vec.end());std::cout << "Rotated vector: ";for (int val : vec) {std::cout << val << " ";}std::cout << std::endl;return 0;
}

注意:

  • rotate适用于,当需要将容器中的元素旋转时。

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

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

相关文章

Crawl4AI 部署安装及 n8n 调用,实现自动化工作流(保证好使)

Crawl4AI 部署安装及 n8n 调用&#xff0c;实现自动化工作流&#xff08;保证好使&#xff09; 简介 Crawl4AI 的介绍 一、Crawl4AI 的核心功能 二、Crawl4AI vs Firecrawl Crawl4AI 的本地部署 一、前期准备 二、部署步骤 1、检查系统的网络环境 2、下载 Crawl4AI 源…

32单片机——外部中断

STM32F103ZET6的系统中断有10个&#xff0c;外部中断有60个 1、中断的概念 中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的&#xff0c;中断功能的存在&#xff0c;很大程度上提高了单片机处理外部或内部事件的能力 eg&#xff1a;&#xff1a;你打开火&…

UG NX二次开发(C#)-获取具有相同属性名称的体对象

文章目录 1、前言2、在UG NX中的属性的赋予3、通过UG NX二次开发获取相同属性的体对象1、前言 UG NX中每个对象都可以属于属性的,包括体、面、边、特征、基准等。在QQ群中有个群有提出一个问题,就是获取相同属性的体对象,然后将这个体对象导出到一个part文件中。我们今天先…

手动实现legend 与 echarts图交互 通过元素和js事件实现图标某项的高亮 显示与隐藏

通过html实现legend的样式 提供调用echarts的api实现与echarts图表交互的效果 实现饼图element实现类似于legend与echartstu表交互效果 效果图 配置代码 <template><div style"height: 400px; width: 500px;background-color: #CCC;"><v-chart:opti…

SpringBoot与BookKeeper整合,实现金融级别的日志存储系统

BookKeeper的优势 高吞吐量和低延迟 分布式架构: Apache BookKeeper采用分布式的架构设计&#xff0c;能够支持高并发的写入和读取操作。 批量写入: 支持批量写入日志条目&#xff0c;显著提高写入效率。 异步I/O: 使用异步I/O操作&#xff0c;减少等待时间&#xff0c;提升…

【Bug】 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

当你在进行深度学习相关操作时&#xff0c;若因缺少本地的 CA 证书而无法下载资源&#xff0c;下面为你介绍几种解决办法&#xff1a; 方法一&#xff1a;更新 CA 证书 在大多数 Linux 发行版中&#xff0c;你可以使用包管理器来更新 CA 证书。例如&#xff0c;在基于 Debian…

Vue3中AbortController取消请求的用法详解

在 Vue3 中&#xff0c;AbortController 用于取消 fetch 请求&#xff0c;避免组件卸载后仍执行异步操作导致的潜在问题&#xff08;如内存泄漏或更新已销毁组件的状态&#xff09;。以下是详细用法和最佳实践&#xff1a; 一、基本用法 创建 AbortController 实例 在组件 setu…

【刷题Day26】Linux命令、分段分页和中断(浅)

说下你常用的 Linux 命令&#xff1f; 文件与目录操作&#xff1a; ls&#xff1a;列出当前目录的文件和子目录&#xff0c;常用参数如-l&#xff08;详细信息&#xff09;、-a&#xff08;包括隐藏文件&#xff09;cd&#xff1a;切换目录&#xff0c;用于在文件系统中导航m…

Spring Boot 参考文档导航手册

&#x1f4da; Spring Boot 参考文档导航手册 &#x1f5fa;️ ✨ 新手入门 &#x1f476; 1️⃣ &#x1f4d6; 基础入门&#xff1a;概述文档 | 环境要求 | 安装指南 2️⃣ &#x1f527; 实操教程&#xff1a;上篇 | 下篇 3️⃣ &#x1f680; 示例运行&#xff1a;基础篇 …

卷积神经网络(CNN)详细教程

卷积神经网络&#xff08;CNN&#xff09;详细教程 一、引言 卷积神经网络&#xff08;Convolutional Neural Networks, CNN&#xff09;是一种深度学习模型&#xff0c;广泛应用于图像识别、视频分析、自然语言处理等领域。CNN通过模拟人类视觉系统的层次结构&#xff0c;能够…

解决SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption faile的问题

问题描述&#xff1a; 在pip安装第三方库时&#xff0c;出现SSL的问题。 传输层安全性协议&#xff08;TLS&#xff09;及其前身安全套接层&#xff08;SSL&#xff09;是现在的 HTTPS 协议中的一种安全协议&#xff0c;目的是为互联网通信提供安全及数据完整性保障。而较新版…

SpringBoot程序的创建以及特点,配置文件,LogBack记录日志,配置过滤器、拦截器、全局异常

目录 一、创建一个SpringBoot程序 二、SpringBoot的特点 ①主要特点 ②其他特点 ③热部署 启动热部署 关闭热部署 三、SpringBoot的配置文件 ①SpringBoot三种配置文件的格式&#xff08;以设置端口号为例&#xff09;&#xff1a; ②配置文件的优先级 ③常见配置项 1…

i18n-ai-translate开源程序,可以使用DeepSeek等模型将您的 i18nJSON翻译成任何语言

一、软件介绍 文末提供程序和源码下载 i18n-ai-translate开源程序使用 DeepSeek等模型可以将您的 i18n JSON 翻译成任何语言。 无缝翻译本地化文件。支持嵌套翻译文件的目录。需要i18next样式的JSON 文件&#xff08;文末一并提供下载&#xff09;。 二、模式 CSV 模式 三个…

Flask + ajax上传文件(一)--单文件上传

一、概述 本教程将教你如何使用Flask后端和AJAX前端实现文件上传功能,包含完整的代码实现和详细解释。 二、环境准备 1. 所需工具和库 Python 3.xFlask框架jQuery库Bootstrap(可选,用于美化界面)2. 安装Flask pip install flask三、项目结构 upload_project/ ├── a…

如何在 Postman 中,自动获取 Token 并将其赋值到环境变量

在 Postman 中&#xff0c;你可以通过 预请求脚本&#xff08;Pre-request Script&#xff09; 和 测试脚本&#xff08;Tests&#xff09; 实现自动获取 Token 并将其赋值到环境变量&#xff0c;下面是完整的操作步骤&#xff1a; ✅ 一、创建获取 Token 的请求 通常这个请求…

北斗导航 | 基于Transformer+LSTM+激光雷达的接收机自主完好性监测算法研究

基于Transformer+LSTM+激光雷达的接收机自主完好性监测算法研究 接收机自主完好性监测(RAIM)是保障全球导航卫星系统(GNSS)定位可靠性的核心技术。传统RAIM算法依赖最小二乘残差法,存在故障漏检、对复杂环境适应性差等问题。结合Transformer、LSTM与激光雷达的多模态融合…

基于Python爬虫的豆瓣电影信息爬取(可以根据选择电影编号得到需要的电影信息)

# 豆瓣电影信息爬虫(展示效果如下图所示:) 这是一个功能强大的豆瓣电影信息爬虫程序,可以获取豆瓣电影 Top 250 的详细信息。 ## 功能特点 - 自动爬取豆瓣电影 Top 250 的所有电影信息 - 支持分页获取,每页 25 部电影,共 10 页 - 获取每部电影的详细信息,包括: - 标题…

Ubuntu22.04/24.04 P104-100 安装驱动和 CUDA Toolkit

硬件环境 使用一块技嘉 B85m-DS3H 安装 P104-100, CPU是带集成显卡的i5-4690. 先在BIOS中设置好显示设备优先使用集成显卡(IGX). 然后安装P104-100开机. 登入Ubuntu 后查看硬件信息, 检查P104-100是否已经被检测到 # PCI设备 lspci -v | grep -i nvidia lspci | grep NVIDIA …

东南亚与中东小游戏市场出海调研报告

东南亚与中东小游戏市场出海调研报告 目标市场筛选与概况 (The Gaming Market in Southeast Asia (SEA) | Allcorrect)图:2018–2027年东南亚主要国家游戏市场收入(亿美元)趋势。到2024年东南亚游戏市场规模预计将接近300亿美元 (2024年东南亚手游市场怎么样? - 快出海问…

力扣4-最长公共前缀

一.题目 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;"fl"示例 2&…