algorithm 修改序列的操作

2023-11-17

修正序列算法

修正序列算法的有些操作会改变容器的内容。例如,把一个容器的部分内容复制到同一个容器的另一个部分,或者用指定值填充容器。

函数 算法
copy(first, last, first2) 复制
copy_backward(first, last, first2) 逆向复制
fill(first, last, val) 改填元素值
generate(first, last, func) 以指定动作的运算结果填充特定范围内的元素
partition(first, last, pred) 切割
random_shuffle(first, last) 随机重排
remove(first, last, val) 移除某种元素,但不删除
replace(first, last, val1, val2) 取代某种元素
rotate(first, middle, last) 旋转
reverse(first, last) 颠倒元素次序
swap(it1, it2) 置换
swap_ranges(first, last, first2) 置换指定范围
transform(first, last, first2, func) 以两个序列为基础,交互作用产生第 3 个序列
unique(first, last) 将重复的元素折叠压缩,变成唯一的

fill(first, last, val)

把值 val 复制到迭代器 first 和 last 指明范围内的各个元素中。

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

using namespace std;

void Test_fill()
{
	vector<int> int_vector;
	for (size_t i = 0; i < 10; i++) int_vector.push_back(i);

	cout << "Vector:";
	for (int item : int_vector) cout << item << ' ';
	cout << endl;

	fill(int_vector.begin(), int_vector.begin() + 5, 0);

	cout << "Vector:";
	for (int item : int_vector) cout << item << ' ';
	cout << endl;
}
Output
Vector:0 1 2 3 4 5 6 7 8 9
Vector:0 0 0 0 0 5 6 7 8 9

random_shuffle(first, last)

把迭代器 first 和 last 指明范围内的元素顺序随机打乱。

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

using namespace std;

void Test_random_shuffle()
{
	vector<int> int_vector;
	for (size_t i = 0; i < 10; i++) int_vector.push_back(i);

	cout << "Vector:";
	for (int item : int_vector) cout << item << ' ';
	cout << endl;

	random_shuffle(int_vector.begin(), int_vector.end());

	cout << "Vector:";
	for (int item : int_vector) cout << item << ' ';
	cout << endl;
}
Output
Vector:0 1 2 3 4 5 6 7 8 9
Vector:8 1 9 2 0 5 7 3 4 6

partition(first, last, pred)

把一个容器划分成两部分,第 1 部分包含令谓词 pred 返回 true 值的元素,第 2 部分包含令谓词 pred 返回 false值的元素。函数返回的迭代器指向两部分的分界点元素。

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

using namespace std;

bool greater5(int value)
{
	return value > 5;
}

void Test_partition()
{
	vector<int> int_vector;
	for (size_t i = 0; i < 10; i++) int_vector.push_back(i);
	random_shuffle(int_vector.begin(), int_vector.end());

	cout << "Vector:";
	for (int item : int_vector) cout << item << ' ';
	cout << endl;

	partition(int_vector.begin(), int_vector.end(), greater5);

	cout << "Vector:";
	for (int item : int_vector) cout << item << ' ';
	cout << endl;
}
Output
Vector:8 1 9 2 0 5 7 3 4 6
Vector:8 6 9 7 0 5 2 3 4 1

rotate(first, middle, last)

把从 middle 到 last 范围内的元素做旋转运算,并放置到从 first 开始的子序列中。

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

using namespace std;

void Test_rotate()
{
	vector<int> int_vector;
	for (size_t i = 0; i < 10; i++) int_vector.push_back(i);

	cout << "Vector:";
	for (int item : int_vector) cout << item << ' ';
	cout << endl;

	rotate(int_vector.begin(), int_vector.begin() + 5, int_vector.end());

	cout << "Vector:";
	for (int item : int_vector) cout << item << ' ';
	cout << endl;
}
Output
Vector:0 1 2 3 4 5 6 7 8 9
Vector:5 6 7 8 9 0 1 2 3 4

相关参考

微软文档(algorithm)

cppreference(algorithm)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

algorithm 修改序列的操作 的相关文章

  • 在派生自 Control 的 ASP.NET 自定义控件中呈现自关闭标记

    我正在开发 Facebook FBML 控件库 并希望创建类似于 ASP NET WebControls 库的 FBML 控件 我有一个默认处理渲染的基类 这是我的渲染方法 protected override void Render Ht
  • 类变量在其定义范围内?

    这可能是一个愚蠢的问题 我正在尝试制作文本泥 我需要每个 Room 类包含其他 Room 类 以便在尝试移动到它们或从它们获取信息时可以引用 但是 我不能这样做 因为我显然无法在其定义中声明一个类 那么 我该怎么做呢 当我说我做不到时 我的
  • C++ 编译器可以对结构中的元素重新排序吗

    C 编译器 特别是 g 可以对结构体的内部元素重新排序吗 我看到一些奇怪的行为 其中我有一个包含如下内容的结构 Struct SomeStruct long someLong long someLongArray 25 unsigned l
  • 在 IEnumerable 中查找相同的集合

    有一项任务要弄清楚如何更新表 DataTable 连接到一个database没有UPDATE陈述 我想出的例子是从邮箱中读取警报 该表将写入 Alerts 如果邮件正文包含单词 SUCCESS gt Alert 变为绿色 如果 FAIL g
  • ctypes.ArgumentError:不知道如何转换参数

    我在C库中定义了一个函数 如下所示 int Test char str1 int id1 char str2 float val float ls 我想在Python中使用它 所以我编写了以下Python代码 str1 a str2 b i
  • iPhone 编程游戏

    使用 Objective C 还是 C 为 iPhone 编写游戏最好 像 Flight Control 这样的游戏会用什么语言编写 图形应采用什么格式才能在 iPhone 上正确显示并快速加载 像 Flight Control 这样的游戏
  • C# 从整数反序列化枚举

    是否可以从 C 中的 int 反序列化枚举 例如如果我有以下课程 class Employee public string Name get set public int EmployeeTypeID get set 我可以轻松地从 XML
  • 类型定义存在于两个库中

    我正在使用 NET 4 5 构建 ASP NET Web 窗体网站 错误 The type System ComponentModel DataAnnotations Schema ForeignKeyAttribute exists in
  • 在 C++ 中从另一个数组初始化结构内的数组[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions struc
  • 将私有部分保留在 C++ 标头之外:纯虚拟基类与 pimpl

    我最近从 Java 和 Ruby 切换回 C 令我惊讶的是 当我更改私有方法的方法签名时 我必须重新编译使用公共接口的文件 因为私有部分也位于 h 文件中 我很快想出了一个解决方案 我想这对于 Java 程序员来说是典型的 接口 纯虚拟基类
  • std::make_shared 作为默认参数无法编译

    在 Visual C 2008 和 2010 中 以下代码无法编译并出现以下错误 include
  • 需要帮助将 winform 迁移到 net 5

    我正在将 winform 应用程序从 net core 3 1 移植到 net 5 并收到以下错误 严重性代码 说明 项目文件行抑制状态 错误NETSDK1136 目标平台必须设置为Windows 通常 通过在 TargetFramewor
  • 变形:Opencv 使用 Visual Studio 将图像显示到曲面屏幕

    我正在尝试使用 opencv API 来扭曲图像 以便将其显示到曲面屏幕上 我已经浏览了opencv中提供的翘曲apihere http docs opencv org 2 4 modules stitching doc warpers h
  • 创建 PING 程序时限制 ICMP 回显答复

    我正在编写一个多线程 ping 程序 我在每个线程 针对每个 IP 上创建了原始套接字 并使用 sendto 向每个线程发送了 ICMP Echo 请求 然后在每个线程中执行了 receivevfrom 我正在从各种套接字中的 IP 获取消
  • 为什么泛型 IList<> 不继承非泛型 IList

    IList
  • 我使用 tm/mktime 是否错误,如果没有,有解决方法吗?

    我认为下面的程序应该输出从公元 1 年到 1970 年每年第一天到 1970 年的秒数 前面是time t在编译它的系统上 CHAR BIT是一个宏 所以我认为你不能只是复制编译后的可执行文件并假设它是正确的 尽管实际上一切都使用 8 位c
  • 对嵌套属性使用 XmlAttributeOverrides

    我试图使用 XmlAttributeOverrides 来控制类序列化后哪些类属性出现在 xml 中 它适用于 根 类上的属性 但不适用于嵌套属性 这是一个简单的例子来说明我想要完成的任务 我的类层次结构如下 public class Ma
  • 使用 c++20 范围删除最后一个元素的最佳方法是什么

    有没有比反转两次更好的方法来使用 c 20 范围删除容器中的最后一个元素 include
  • 如何在 OpenCV 中删除 mouseCallback

    在使用 C 的 OpenCV 中 有没有办法删除 mouseHandler int event int x int y int flags void param 通过函数添加到窗口 image window cv setMouseCallb
  • 实例着色器矩阵的设置

    我想绘制实例立方体 我可以打电话GL DrawArraysInstanced PrimitiveType Triangles 0 36 2 成功地 我的问题是所有立方体都绘制在相同的位置和相同的旋转 我如何为每个立方体单独更改它 要创建不同

随机推荐

  • QT——C++ 多线程05

    目录标题 一 创建多线程的方式 一 方式一 二 方式二 三 方式三 一 创建多线程的方式 QT创建 使用 多线程的方式有三种 直接创建QThread 对象 重写run方法 最后调用start方法启动线程 通过调用QObject类提供的mov
  • k8s基础概念、ETCD

    原理 和k8s结合点 etcd与k8s的交集 维护 基础概念 物理组件 逻辑组件 网络组件 工作负载 1 物理组件 Master Control plane kube apiserver 提供唯一api接口 提供集群管理接口 用户认证授权
  • 【Qt】使用 setWindowFlags 方法设置窗体的最小化、最大化、关闭按钮

    一 设置方法 void setWindowFlags Qt WindowFlags type Qt WindowFlags 有很多参数 其中 窗口最小化按钮 Qt WindowMinimizeButtonHint 窗口最大化按钮 Qt Wi
  • html 识别文本中的\n 进行换行

    文本内容有 n 怎么换行 1 v html渲染 使用正则将 n 替换成 br 标签 再用v html渲染 this content value replace n g br div div 2 使用css的white space div t
  • 学好少儿编程做人工智能开拓者

    乔布斯曾经说过 人人都应该学习编程 因为它教会你如何思考 格物斯坦小坦克认为少儿编程教育已经不再是一个遥远的话题 它逐渐成为一个趋势 成为一个现实 少儿教育编程行业领域的火爆 也反映出了国家对于少儿编程教育的重视 以及行业对编程人才的刚性需
  • 虚拟化技术7小问

    目录 kvm中的虚拟机cpu核心大于1 虚拟机就不能启动 只能设置为1的时候虚拟机才能启动 是什么原因 如何查看虚拟机宿主机的CPU是否支持硬件虚拟化 宿主机支持虚拟化 是不是还要开启相关的设置 虚拟机中再安装的虚拟机是不是只能是单核的虚拟
  • 存储器基础入门

    1 泰瑞达机台 Magnum VU本身作为一个灵活 集合式的测试平台 可以支持所有NAND以及MCP MCP Multiple Chip Package 存储器 MCP是在一个塑料封装外壳内 垂直堆叠大小不同的各类存储器或非存储器芯片 是一
  • Android TabLayout setupWithViewPager()方法绑定Viewpager不显示文字

    setupWithViewPager 做了什么事情 TabLayout tabLayout findViewById R id tabLayout ViewPager viewPager findViewById R id viewPage
  • spring框架---IOC

    spring框架的概述 spring是轻量级的开源的JavaEE框架 解决企业应用的开发复杂性 spring有两个核心 IOC AOP IOC 控制反转 把创建对象的过程交给Spring进行管理 AOP 面向切面 不修改源代码的进行功能增强
  • SpringBoot小知识点(可能有你不知道的)

    SpringBoot复习 基础部分 1 SpringBoot中配置文件使用 配置文件间的加载优先级 properties 最高 gt yml gt yaml 最低 2 yaml数据读取 对于yaml文件中的数据 其实你就可以想象成这就是一个
  • 【Salvation】——怪物角色动画&主角碰撞死亡动画

    Salvation 怪物角色动画 主角碰撞死亡动画 写在前面 这个动画功能同样也是使用JavaScript编写脚本 在Unity3D游戏引擎的环境中实现 在怪物的角色动画中 很多与人物相同 这里不再重复 一 设计敌人 拖一个精英sprite
  • Tcp通信步骤

    package cn dali4 code01 TCP通信步骤 服务器先启动 服务器端不会主动请求客户端 必须使用客户端请求服务器 客户端和服务器端建立一个逻辑连接 这个链接包含了一个IO对象 客户端和服务器端可以使用IO对象进行通信 IO
  • 树莓派软连接修改(python为例)

    树莓派软连接修改 进入linux的软连接存放位置 cd usr bin 删除原有软连接 以python为例 rm python 建立新软连接 以python连接python3为例 ln s usr python bin python3 us
  • 大数取模运算,快速幂取模运算

    1 快速幂取模 http www cnblogs com yinger archive 2011 06 08 2075043 html 快速幂取模就是在O logn 内求出a n mod b的值 算法的原理是ab mod c a mod c
  • 微服务系列:Spring Cloud Alibaba 之 Sentinel 高级流控规则

    微服务系列 Spring Cloud Alibaba 之 Sentinel 基本流控规则 在上一篇中 我们学习完了 Sentinel 的基本流控规则 这篇我们来研究一下 Sentinel 的高级流控规则 话不多说 开始今天的学习 一 概述
  • 【进阶项目】Lombok 使用详解

    前言 在 Java 应用程序中存在许多重复相似的 生成之后几乎不对其做更改的代码 但是我们还不得不花费很多精力编写它们来满足 Java 的编译需求比如 在 Java 应用程序开发中 我们几乎要为所有 Bean 的成员变量添加 get set
  • 【java毕业设计】基于java+Lucene+Tomcat的搜索引擎设计与实现(毕业论文+程序源码)——搜索引擎

    基于java Lucene Tomcat的搜索引擎设计与实现 毕业论文 程序源码 大家好 今天给大家介绍基于java Lucene Tomcat的搜索引擎设计与实现 文章末尾附有本毕业设计的论文和源码下载地址哦 需要下载开题报告PPT模板及
  • 忽略shell脚本中回车的方法

    在实际应用过程中 经常遇到需要忽略shell脚本中回车的问题 本文做了一些总结 既有常规操作 也有令人拍案叫绝的方法 且让我慢慢说来 一 使用Linux shell自身的字符串操作 Linux shell内置了一系列的字符串操作符号 可以实
  • 高并发的epoll+多线程

    epoll是linux下高并发服务器的完美方案 因为是基于事件触发的 所以比select快的不只是一个数量级 单线程epoll 触发量可达到15000 但是加上业务后 因为大多数业务都与数据库打交道 所以就会存在阻塞的情况 这个时候就必须用
  • algorithm 修改序列的操作

    文章目录 修正序列算法 fill first last val random shuffle first last partition first last pred rotate first middle last 相关参考 修正序列算法