window下tqdm进度条

原代码是linux下运行,修改后可在window下运行。

#ifndef TQDM_H
#define TQDM_H#include <chrono>
#include <ctime>
#include <numeric>
#include <ios>
#include <string>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <math.h>
#include <algorithm>
#include <io.h>
class tqdm {
private:// time, iteration counters and deques for rate calculationsstd::chrono::time_point<std::chrono::system_clock> t_first = std::chrono::system_clock::now();std::chrono::time_point<std::chrono::system_clock> t_old = std::chrono::system_clock::now();int n_old = 0;std::vector<double> deq_t;std::vector<int> deq_n;int nupdates = 0;int total_ = 0;int period = 1;unsigned int smoothing = 50;bool use_ema = true;float alpha_ema = 0.1;std::vector<const char*> bars = { " ", "▏", "▎", "▍", "▌", "▋", "▊", "▉", "█" };bool in_screen = (system("test $STY") == 0);bool in_tmux = (system("test $TMUX") == 0);bool is_tty = _isatty(1);bool use_colors = true;bool color_transition = true;int width = 40;std::string right_pad = "▏";std::string label = "";void hsv_to_rgb(float h, float s, float v, int& r, int& g, int& b) {if (s < 1e-6) {v *= 255.;r = v; g = v; b = v;}int i = (int)(h*6.0);float f = (h*6.) - i;int p = (int)(255.0*(v*(1. - s)));int q = (int)(255.0*(v*(1. - s * f)));int t = (int)(255.0*(v*(1. - s * (1. - f))));v *= 255;i %= 6;int vi = (int)v;if (i == 0) { r = vi; g = t;  b = p; }else if (i == 1) { r = q;  g = vi; b = p; }else if (i == 2) { r = p;  g = vi; b = t; }else if (i == 3) { r = p;  g = q;  b = vi; }else if (i == 4) { r = t;  g = p;  b = vi; }else if (i == 5) { r = vi; g = p;  b = q; }}public:tqdm() {if (in_screen) {set_theme_basic();color_transition = false;}else if (in_tmux) {color_transition = false;}}void reset() {t_first = std::chrono::system_clock::now();t_old = std::chrono::system_clock::now();n_old = 0;deq_t.clear();deq_n.clear();period = 1;nupdates = 0;total_ = 0;label = "";}void set_theme_line() { bars = { "─", "─", "─", "╾", "╾", "╾", "╾", "━", "═" }; }void set_theme_circle() { bars = { " ", "◓", "◑", "◒", "◐", "◓", "◑", "◒", "#" }; }void set_theme_braille() { bars = { " ", "⡀", "⡄", "⡆", "⡇", "⡏", "⡟", "⡿", "⣿" }; }void set_theme_braille_spin() { bars = { " ", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠇", "⠿" }; }void set_theme_vertical() { bars = { "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█", "█" }; }void set_theme_basic() {bars = { " ", " ", " ", " ", " ", " ", " ", " ", "#" };right_pad = "|";}void set_label(std::string label_) { label = label_; }void disable_colors() {color_transition = false;use_colors = false;}void finish() {progress(total_, total_);printf("\n");fflush(stdout);}void progress(int curr, int tot) {if (is_tty && (curr%period == 0)) {total_ = tot;nupdates++;auto now = std::chrono::system_clock::now();double dt = ((std::chrono::duration<double>)(now - t_old)).count();double dt_tot = ((std::chrono::duration<double>)(now - t_first)).count();int dn = curr - n_old;n_old = curr;t_old = now;if (deq_n.size() >= smoothing) deq_n.erase(deq_n.begin());if (deq_t.size() >= smoothing) deq_t.erase(deq_t.begin());deq_t.push_back(dt);deq_n.push_back(dn);double avgrate = 0.;if (use_ema) {avgrate = deq_n[0] / deq_t[0];for (unsigned int i = 1; i < deq_t.size(); i++) {double r = 1.0*deq_n[i] / deq_t[i];avgrate = alpha_ema * r + (1.0 - alpha_ema)*avgrate;}}else {double dtsum = std::accumulate(deq_t.begin(), deq_t.end(), 0.);int dnsum = std::accumulate(deq_n.begin(), deq_n.end(), 0.);avgrate = dnsum / dtsum;}// learn an appropriate period length to avoid spamming stdout// and slowing down the loop, shoot for ~25Hz and smooth over 3 secondsif (nupdates > 10) {period = (int)(std::min(std::max((1.0 / 25)*curr / dt_tot, 1.0), 5e5));smoothing = 25 * 3;}double peta = (tot - curr) / avgrate;double pct = (double)curr / (tot*0.01);if ((tot - curr) <= period) {pct = 100.0;avgrate = tot / dt_tot;curr = tot;peta = 0;}double fills = ((double)curr / tot * width);int ifills = (int)fills;printf("\015 ");if (use_colors) {if (color_transition) {// red (hue=0) to green (hue=1/3)int r = 255, g = 255, b = 255;hsv_to_rgb(0.0 + 0.01*pct / 3, 0.65, 1.0, r, g, b);printf("\033[38;2;%d;%d;%dm ", r, g, b);}else {printf("\033[32m ");}}for (int i = 0; i < ifills; i++) std::cout << bars[8];if (!in_screen && (curr != tot)) printf("%s", bars[(int)(8.0*(fills - ifills))]);for (int i = 0; i < width - ifills - 1; i++) std::cout << bars[0];printf("%s ", right_pad.c_str());if (use_colors) printf("\033[1m\033[31m");printf("%4.1f%% ", pct);if (use_colors) printf("\033[34m");std::string unit = "Hz";double div = 1.;if (avgrate > 1e6) {unit = "MHz"; div = 1.0e6;}else if (avgrate > 1e3) {unit = "kHz"; div = 1.0e3;}printf("[%4d/%4d | %3.1f %s | %.0fs<%.0fs] ", curr, tot, avgrate / div, unit.c_str(), dt_tot, peta);printf("%s ", label.c_str());if (use_colors) printf("\033[0m\033[32m\033[0m\015 ");if ((tot - curr) > period) fflush(stdout);}}
};
#endif

主函数: 

#include "MyClass.h"
#include <windows.h>
int main() {int N = 2000;tqdm bar;std::cout << "Overhead of loop only:" << std::endl;for (int i = 0; i < 100000000; i++) {bar.progress(i, 100000000);}bar.finish();std::cout << "Basic:" << std::endl;bar.reset();bar.set_theme_basic();for (int i = 0; i < N; i++) {bar.progress(i, N);Sleep(1000);}bar.finish();std::cout << "Braille:" << std::endl;bar.reset();bar.set_theme_braille();for (int i = 0; i < N; i++) {bar.progress(i, N);Sleep(300);}bar.finish();std::cout << "Line:" << std::endl;bar.reset();bar.set_theme_line();for (int i = 0; i < N; i++) {bar.progress(i, N);Sleep(300);}bar.finish();std::cout << "Circles:" << std::endl;bar.reset();bar.set_theme_circle();for (int i = 0; i < N; i++) {bar.progress(i, N);Sleep(300);}bar.finish();bar.reset();std::cout << "Vertical bars:" << std::endl;bar.reset();bar.set_theme_vertical();for (int i = 0; i < N; i++) {bar.progress(i, N);Sleep(3000);}bar.finish();return 0;
}

源码 

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

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

相关文章

系统吃swap问题排查

目录 背景 问题 分析并解决 1.控制线程数 2.更换IO组件 3.Linux进程信息文件分析 总结加餐 参考文档 背景 隔壁业务组系统是简单的主从结构&#xff0c;写索引的服务(主)叫primary&#xff0c; 读索引并提供搜索功能的服务(从)叫replica。业务线同步数据并不是平滑的&…

【新书速递】使用MATLAB进行雷达系统分析和设计(第四版)(2022)

来源&#xff1a;公众号高山防务 一、目录 目录 1雷达定义和术语 1.1雷达系统分类和波段 1.1.1高频&#xff08;HF&#xff09;和甚高频&#xff08;VHF&#xff09;雷达&#xff08;A和B波段&#xff09; 1.1.2超高频&#xff08;UHF&#xff09;雷达&#xff08;C波段&am…

【学习css1】flex布局-页面footer部分保持在网页底部

中间内容高度不够屏幕高度撑不开的页面时候&#xff0c;页面footer部分都能保持在网页页脚&#xff08;最底部&#xff09;的方法 1、首先上图看显示效果 2、奉上源码 2.1、html部分 <body><header>头部</header><main>主区域</main><foot…

循环结构(一)——for语句【互三互三】

文章目录 &#x1f341; 引言 &#x1f341; 一、语句格式 &#x1f341; 二、语句执行过程 &#x1f341; 三、语句格式举例 &#x1f341;四、例题 &#x1f449;【例1】 &#x1f680;示例代码: &#x1f449;【例2】 【方法1】 &#x1f680;示例代码: 【方法2】…

通过git将文件push到github 远程仓库

1.先git clone 代码地址 git clone htttp://github.com/用户名/test.git 2. 添加文件 例如&#xff1a;touch 1.txt 3.将文件添加到暂存区 git add 1.txt 4.提交 git commit -m "commit 1.txt" 5.与远程仓库建立关联 git remote add 远程仓库名 远程仓库…

华为浏览器,Chrome的平替,插件无缝连接

文章目录 背景插件书签 背景 不知道各位小伙伴有没有这样的痛点&#xff0c;办公电脑、家里的电脑还有手机、平板等&#xff0c;收藏了一个网址或者在手机上浏览了某个网页&#xff0c;保存起来&#xff0c;可是一换平台或者换个电脑&#xff0c;在想要浏览之前收藏的东西&…

Elasticsearch 8 支持别名查询

在 Elasticsearch 8 中&#xff0c;使用 Java 高级 REST 客户端进行别名管理的过程与之前的版本类似&#xff0c;但有一些API细节上的变化。以下是如何使用 Java 和 Elasticsearch 8 进行别名操作的例子&#xff1a; 引入依赖 确保你的项目中包含了 Elasticsearch 的高级 RES…

iPad锁屏密码忘记怎么办?有什么方法可以解锁?

当我们在日常使用iPad时&#xff0c;偶尔可能会遇到忘记锁屏密码的尴尬情况。这时&#xff0c;不必过于担心&#xff0c;因为有多种方法可以帮助您解锁iPad。接下来&#xff0c;小编将为您详细介绍这些解决方案。 一、使用iCloud的“查找我的iPhone”功能 如果你曾经启用了“查…

亚马逊IP关联是什么?要怎么解决呢?

亚马逊不仅提供了广泛的商品和服务&#xff0c;也是许多企业和个人选择的电子商务平台。然而&#xff0c;与亚马逊相关的IP关联问题&#xff0c;特别是在网络安全和运营管理方面&#xff0c;经常成为使用亚马逊服务的用户和商家关注的焦点。通过了解亚马逊IP关联的含义、可能的…

数学建模国赛入门指南

文章目录 认识数学建模及国赛认识数学建模什么是数学建模&#xff1f;数学建模比赛 国赛参赛规则、评奖原则如何评省、国奖评奖规则如何才能获奖 国赛赛题分类及选题技巧国赛赛题特点赛题分类 国赛历年题型及优秀论文 数学建模分工技巧数模必备软件数模资料文献数据收集资料收集…

单点登录(SSO)机制

1、定义 单点登录&#xff08;Single Sign On&#xff09;&#xff0c;简称为 SSO&#xff0c;SSO的定义是指用户只需要登录一次就可以访问所有相互信任的应用系统。 eg:淘宝、天猫都属于阿里旗下&#xff0c;当用户登录淘宝后&#xff0c;再打开天猫&#xff0c;系统便自动帮…

从“Hello,World”谈起(C++入门)

前言 c的发展史及c能干什么不能干什么不是我们今天的重点&#xff0c;不在这里展开&#xff0c;有兴趣的朋友可以自行查阅相关资料。今天我们主要是围绕c的入门程序&#xff0c;写一个“hello&#xff0c;world”&#xff0c;并且围绕这个入门程序简单介绍一下c和c的一些语法&…

【fastadmin 开发实战】select 级联选择

先看实现的效果 1、表单页面实现级联选择 2、级联选项后台可以编辑添加 前端代码&#xff08;编辑窗口&#xff09;&#xff1a; <div class"form-group"><label class"control-label col-xs-12 col-sm-2">{:__(渠道归属)}:</label><…

STM32HAL库+ESP8266+cJSON+微信小程序_连接华为云物联网平台

STM32HAL库ESP8266cJSON微信小程序_连接华为云物联网平台 实验使用资源&#xff1a;正点原子F407 USART1&#xff1a;PA9P、A10&#xff08;串口打印调试&#xff09; USART3&#xff1a;PB10、PB11&#xff08;WiFi模块&#xff09; DHT11&#xff1a;PG9&#xff08;采集数据…

推荐3款良心效率软件,妥妥的神器,绝对不可错过

Wise JetSearch Wise JetSearch 是一款免费且功能强大的文件搜索工具&#xff0c;支持在本地硬盘和可移动磁盘上快速查找文件和文件夹。该软件特别适用于FAT32、NTFS以及exFAT格式的硬盘。 Wise JetSearch 使用索引技术&#xff0c;可以在极短的时间内完成大规模文件的搜索任务…

Hadoop3:HDFS-通过配置黑白名单对集群进行扩缩容,并实现数据均衡(实用)

一、集群情况介绍 我的本地虚拟机&#xff0c;一共有三个节点&#xff0c;hadoop102、hadoop103、hadoop104 二、白名单 创建白名单文件whitelist&#xff0c;通过白名单的配置&#xff0c;只允许集群包含102和103两台机器可以存储数据&#xff0c;104无法存储数据。 需求 …

怎样将aac转换mp3格式?推荐四个aac转MP3的方法

怎样将aac转换mp3格式&#xff1f;当需要将aac格式音频转换为MP3格式时&#xff0c;有几种方法可以轻松实现这一目标。MP3是一种广泛支持的音频格式&#xff0c;几乎所有设备和平台都能播放MP3文件&#xff0c;包括各种音乐播放器、手机、平板电脑和汽车音响系统。而且它也提供…

【C++】入门基础(命名空间、缺省参数、函数重载)

目录 一.命名空间&#xff1a;namespace 1.namespace的价值 2.namespace的定义 3.namespace的使用方法 3.1 域解析运算符:: 3.2 using展开 3.3 using域解析运算符 二.输入输出 三.缺省参数 四.函数重载 1.参数类型不同 2.参数个数不同 3.参数顺序不同 一.命名空间&…

分析逆向案例十七——深圳大学登录逆向(新类型,有些加密参数是通过页面源代码获取的,不同于前面有发包)

网址&#xff1a;aHR0cDovL25ld2F1dGhzZXJ2ZXIuc3p1LmVkdS5jbi9hdXRoc2VydmVyL2xvZ2lu 登陆页面&#xff0c;找到登录接口&#xff0c;发现登录接口是document类型&#xff0c;而不是xhr类型&#xff0c;无法跟栈分析。 登陆两次&#xff0c;发现有两个加密参数&#xff0c;lt…

君方智能设计平台-夹点交互编辑架设计与实现

1.背景介绍 在图形平台开发中&#xff0c;实现强大的图形编辑功能对于用户体验至关重要。夹点&#xff08;Grips&#xff09;编辑是其中的一个关键部分&#xff0c;它不仅简化了用户与图形对象的交互&#xff0c;还提供了多种功能&#xff0c;从简单的移动和缩放到复杂的旋转和…