C++笔记之rolling counter(滚动计数器)

C++笔记之rolling counter(滚动计数器)

一个 rolling counter(滚动计数器)是一个计数器,可以在给定的范围内不断增加,当达到最大值时会从最小值重新开始。

code review!

文章目录

  • C++笔记之rolling counter(滚动计数器)
    • 1.一个用C++实现滚动计数器的简单示例代码
    • 2.rolling_counter的使用场景

1.一个用C++实现滚动计数器的简单示例代码

在这里插入图片描述

在上面的代码中,RollingCounter 类用于实现滚动计数器。它接受三个参数:最小值、最大值和起始值(默认为0)。increment 函数用于增加计数器的值,并在达到最大值时将其重置为最小值。getValue 函数用于获取当前计数器的值。

main 函数中,我们创建了一个滚动计数器实例,并进行了一些增加计数器值的操作。你可以根据需要进行进一步的修改和扩展。
运行

Current value: 5
Current value: 6
Current value: 7
Current value: 8
Current value: 9
Current value: 0
Current value: 1
Current value: 2
Current value: 3
Current value: 4
Current value: 5
Current value: 6
Current value: 7
Current value: 8
Current value: 9

代码

#include <iostream>class RollingCounter {
private:int current;int minValue;int maxValue;public:RollingCounter(int minVal, int maxVal, int startVal = 0): minValue(minVal), maxValue(maxVal), current(startVal) {if (minValue > maxValue) {std::cerr << "Error: minValue must be less than or equal to maxValue" << std::endl;exit(1);}if (current < minValue || current > maxValue) {std::cerr << "Error: startVal must be within the range [minValue, maxValue]" << std::endl;exit(1);}}void increment() {current = (current + 1) > maxValue ? minValue : (current + 1);}int getValue() const {return current;}
};int main() {RollingCounter counter(0, 9, 5);for (int i = 0; i < 15; ++i) {std::cout << "Current value: " << counter.getValue() << std::endl;counter.increment();}return 0;
}

2.rolling_counter的使用场景

滚动计数器(Rolling Counter)在许多应用场景中都有用处,主要用于循环计数和周期性操作。以下是一些使用滚动计数器的常见场景:

  1. 循环显示器(Cyclic Display):滚动计数器可用于循环展示一组元素,如广告牌上的广告、数字时钟上的数字等。当计数器达到最大值后,它会从最小值重新开始,形成循环效果。

  2. 计时器和定时操作:在需要定期执行某项操作的场景中,滚动计数器可以用来追踪时间或循环周期。例如,周期性地更新UI元素、定时触发事件等。

  3. 循环迭代:当你需要在一个固定的范围内循环迭代,而不是在超过范围时抛出错误,滚动计数器可以派上用场。例如,在游戏中循环遍历地图的区块或角色列表。

  4. 有限状态机(Finite State Machines):有些状态机需要在一组有限状态之间循环切换。滚动计数器可以作为状态的索引,帮助控制状态之间的切换。

  5. 轮询和循环队列:在处理数据队列或缓冲区时,滚动计数器可以帮助你循环遍历数据,确保队列不会溢出或数据不会丢失。

  6. 信号灯控制:在交通信号灯或工业控制系统中,滚动计数器可以用来模拟信号灯的状态切换,从而在不同状态之间循环。

  7. 动画循环:在动画中,滚动计数器可以用来确定动画帧的索引,以实现动画的循环播放。

  8. 轮流调度:在任务调度或资源分配中,滚动计数器可以帮助循环选择任务或资源,实现公平分配。

总之,滚动计数器适用于任何需要在一定范围内循环计数或迭代的场景。通过循环计数,实现周期性的操作、状态切换、循环展示等功能。根据具体应用的需求,可以将滚动计数器灵活地应用于不同的领域。

请添加图片描述
请添加图片描述

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

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

相关文章

计算机视觉:深层卷积神经网络的构建

本文重点 上一节课程中我们学习了单卷积层的前向传播,本次课程我们构建一个具有三个卷积层的卷积神经网络,然后从输入(39*39*3)开始进行三次卷积操作,我们来看一下每次卷积的输入和输出维度的变化。 第一层 第一层使用3*3*3的过滤器来提取特征,那么f[1]=3,然后步长s[…

计算机安全学习笔记(III):强制访问控制 - MAC

基本概念 强制访问控制是一种高级访问控制机制&#xff0c;旨在通过强制执行事先定义的安全策略&#xff0c;实现资源和信息的严格保护。与自主访问控制&#xff08;Discretionary Access Control&#xff0c;DAC&#xff09;不同&#xff0c;MAC 的控制权不由用户自身决定&am…

基于springboot学生社团管理系统/基于Java的高校社团管理系统的设计与实现

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

Stable Diffusion WebUI 整合包

现在网络上出现的各种整合包只是整合了运行 Stable Diffusion WebUI&#xff08;以下简称为 SD-WebUI&#xff09;必需的 Python 和 Git 环境&#xff0c;并且预置好模型&#xff0c;有些整合包还添加了一些常用的插件&#xff0c;其实际与手动进行本地部署并没有区别。 不过&a…

【DEVOPS】现状篇

0. 目录 1. 前言2. 现状2.1 需求管理2.2 开发流程2.3 测试流程2.4 部署流程2.5 维护阶段 3. 后记 4. 相关 1. 前言 一直以来&#xff0c;深感内部工程化能力欠缺&#xff0c;急于将事情向前推进&#xff0c;总是希望能够向前走几步&#xff0c;再走几步。 可惜的是&#xff0…

QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动

QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动 0、背景1、基本环境2、开发环境编译Qt MySql数据库驱动2.1 依赖说明2.2 MySQL驱动编译过程 3、交叉编译Qt MySql数据库驱动3.1 依赖说明3.3.1 如何在交叉编译服务器上找到mysql.h及相关头文件3.3.2 如果…

时序预测 | MATLAB实现SSA-XGBoost(麻雀算法优化极限梯度提升树)时间序列预测

时序预测 | MATLAB实现SSA-XGBoost(麻雀算法优化极限梯度提升树)时间序列预测 目录 时序预测 | MATLAB实现SSA-XGBoost(麻雀算法优化极限梯度提升树)时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 Matlab实现SSA-XGBoost时间序列预测&#xff0c;麻…

【rust/egui】(六)看看template的app.rs:TextEdit

说在前面 rust新手&#xff0c;egui没啥找到啥教程&#xff0c;这里自己记录下学习过程环境&#xff1a;windows11 22H2rust版本&#xff1a;rustc 1.71.1egui版本&#xff1a;0.22.0eframe版本&#xff1a;0.22.0上一篇&#xff1a;这里 TextEdit 文本编辑框 其定义为&#…

Flink CDC数据同步

背景 随着信息化程度的不断提高&#xff0c;企业内部系统的数量和复杂度不断增加&#xff0c;因此&#xff0c;数据库系统的同步问题已成为越来越重要的问题。 缓存失效 在缓存中缓存的条目(entry)在源头被更改或者被删除的时候立即让缓存中的条目失效。如果缓存在一个独立的…

37.RESTful

RESTful RESTful简介 REST&#xff1a;Representational State Transfer&#xff0c;表现层资源状态转移 资源&#xff1a;资源是一种看待服务器的方式&#xff0c;即——将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的…

Springboot使用kafka事务-生产者方

前言 在上一篇文章中&#xff0c;我们使用了springboot的AOP功能实现了kafka的分布式事务&#xff0c;但是那样实现的kafka事务是不完美的&#xff0c;因为请求进来之后分配的是不同线程&#xff0c;但不同线程使用的kafka事务却是同一个&#xff0c;这样会造成多请求情况下的…

QT ListQvector at赋值出错以及解决办法 QT基础入门【QT存储结构】

1、问题 error: passing const QString as this argument discards qualifiers error: assignment of read-only location vec.QVector<int>::at(0) 在Qt中QList,Qvector一般获取元素都是通过at(index)来获取,但是at()的返回是一个const & 常引用,也就是元素不支…

[shell] $@ 与 eval

$ 与 $* $的用法以及与$*的区别可以参考 What does $ mean in a shell script? 测试脚本如下 #!/bin/bashset -e set -xbash -c $ bash -c "$" bash -c $* bash -c "$*"一般情况下&#xff0c;我们可能会这样执行脚本 ./test.sh Y324 X1 echo hello输…

微信小程序canvas type=2d生成海报保存到相册、文字换行溢出显示...、文字删除线、分享面板

一、简介 做个简单的生成二维码海报分享&#xff0c;我做的时候也找简单的方法看能不能实现页面直接截图那种生成图片&#xff0c;原生小程序不支持&#xff0c;不多介绍下面有全部代码有注释、参数自行替换运行看看&#xff0c;还有需要优化的地方&#xff0c;有问题可以咨询…

squid服务器

目录 squid初识 安装squid代理 常用命令 主要配置文件 正向代理 环境配置 linux服务器设置 windows客户端设置 反向代理 环境配置 在web服务器配置服务 linux服务器配置 squid初识 含义&#xff1a;squid cache是一个流行的自由软件&#xff08;GNU通用公共许可证…

低代码与低代码平台的概念解析

随着数字化转型和软件需求的不断增长&#xff0c;传统的手写代码开发方式已经无法满足迅速推出应用程序的需求。为了加快软件开发的速度并降低技术门槛&#xff0c;低代码开发模式应运而生。本文将介绍低代码的概念&#xff0c;探讨什么是低代码什么是低代码平台&#xff1f; 一…

poi带表头多sheet导出

导出工具类 package com.hieasy.comm.core.excel;import com.hieasy.comm.core.excel.fragment.ExcelFragment; import com.hieasy.comm.core.utils.mine.MineDateUtil; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.apache.po…

Git基本操作(Idea版)

第一次发布项目&#xff08;本地->远程&#xff09; 方式一 通过push的方式推送本地库到远程库&#xff08;远程已创建好仓库&#xff09; 这种方式需要提前创建好仓库。 右键点击项目&#xff0c;可以将当前分支的内容 push 到 GitHub 的远程仓库中。 注意&#xff1a…

Readl DOM (真实DOM) 和 Virtual DOM (虚拟DOM)之间的区别,以及优缺点

文章目录 一、Readl DOM (真实DOM) 和 Virtual DOM (虚拟DOM)之间的区别&#xff1f;二、优点缺点1.优点2.缺点 一、Readl DOM (真实DOM) 和 Virtual DOM (虚拟DOM)之间的区别&#xff1f; 两者之间的区别&#xff1a; 1、真实DOM&#xff1a; 真实DOM是浏览器中的实际DOM结构…

CSDN编程题-每日一练(2023-08-27)

CSDN编程题-每日一练&#xff08;2023-08-27&#xff09; 一、题目名称&#xff1a;异或和二、题目名称&#xff1a;生命进化书三、题目名称&#xff1a;熊孩子拜访 一、题目名称&#xff1a;异或和 时间限制&#xff1a;1000ms内存限制&#xff1a;256M 题目描述&#xff1a; …