当前位置: 首页 > news >正文

C/C++ 编程小工具

编写了 tools.htools.cpp,用于 Debug、性能测试、打印日志。

tools.h

#ifndef TOOLS_H
#define TOOLS_H#include <time.h>
#include <fstream>
#include <iostream>
#include <random>
#include <chrono>
#include <vector>
#include <algorithm>using namespace std;// 换行
#define pn puts("")// 代码位置
#define where printf("File: %s, Line: %d, Function: %s. ", __FILE__, __LINE__, __FUNCTION__)// 打印错误
#define ErrorInfo(format, ...)         \{                                  \printf("[Error] ");            \where;                         \printf(format, ##__VA_ARGS__); \pn;                            \}// 捕获异常
#define Try(code)                                                  \try                                                            \{                                                              \code;                                                      \}                                                              \catch (const std::exception &e)                                \{                                                              \std::cerr << "Catch exception: " << e.what() << std::endl; \where;                                                     \return -1;                                                 \}// 日志文件
#define LOGFILE "Log.txt"// 写日志
#define Log(str) PrintLog(str, __FILE__, __LINE__, __FUNCTION__);/*** @brief 打印日志文件*/
void PrintLog(char *str, const char *FILE, const int LINE, const char *FUNCTION);// #######################################################################################################extern std::chrono::steady_clock::time_point TM_start, TM_end; // 记录时钟周期
extern std::vector<int64_t> TM_mem;                            // 存储循环测试结果#define To_ns(dur) std::chrono::duration_cast<std::chrono::nanoseconds>(dur).count()  // clock -> ns
#define To_us(dur) std::chrono::duration_cast<std::chrono::microseconds>(dur).count() // clock -> us
#define To_ms(dur) std::chrono::duration_cast<std::chrono::milliseconds>(dur).count() // clock -> ms// 计时器
#define Timer(str, code)                         \TM_start = std::chrono::steady_clock::now(); \code;                                        \TM_end = std::chrono::steady_clock::now();   \printf("Running Time of <%s>:\t%15.6f ms\n", \str, double(To_ns(TM_end - TM_start)) / 1000000);// 循环测试
#define Loop(loop, str, code)                        \TM_mem.resize(loop, 0);                          \for (int __i = 0; __i < loop; __i++)             \{                                                \TM_start = std::chrono::steady_clock::now(); \{                                            \code;                                    \}                                            \TM_end = std::chrono::steady_clock::now();   \TM_mem[__i] = To_ns(TM_end - TM_start);      \}                                                \Analyis_TM(loop, str);void Analyis_TM(int loop, const char *str); // 分析代码性能// #######################################################################################################/*** @brief 自定义分配器,确保内存块是 32 字节对齐的*/
template <typename T>
class AlignedAllocator
{
public:using value_type = T;using pointer = T *;using const_pointer = const T *;using reference = T &;using const_reference = const T &;using size_type = std::size_t;using difference_type = std::ptrdiff_t;template <typename U>struct rebind{using other = AlignedAllocator<U>;};pointer allocate(size_type n){return static_cast<pointer>(std::aligned_alloc(32, n * sizeof(T)));}void deallocate(pointer p, size_type) noexcept{std::free(p);}
};/*** @brief 具有 32-Btyes 对齐的内存*/
typedef vector<int32_t, AlignedAllocator<int32_t>> AlignedVcetor;#endif // TOOLS_H

tools.cpp

#include "tools.h"void PrintLog(char *str, const char *FILE, const int LINE, const char *FUNCTION)
{fstream fout;fout.open(LOGFILE, ios::out | ios::app); // 追加if (fout.is_open()){time_t timep;time(&timep);            // 获取从1970至今过了多少秒string t(ctime(&timep)); // 秒数转化成字符串格式,格式:Tue Oct  8 16:15:42 2024fout << t; // 记录时间fout << "File: " << FILE << ", Line: " << LINE<< ", Function: " << FUNCTION << ". "; // 记录位置fout << str << endl; // 记录日志信息fout.flush();        // 立即写fout.close();}else{ErrorInfo("Failed to open the file %s.", LOGFILE);}
}//########################################################################################################std::chrono::steady_clock::time_point TM_start{}, TM_end{};
std::vector<int64_t> TM_mem{};void Analyis_TM(int loop, const char *str)
{int64_t min, max, med, aver = 0;auto lt = [](int64_t a, int64_t b){ return (a < b); };std::sort(TM_mem.data(), TM_mem.data() + loop, lt);min = TM_mem[0];max = TM_mem[loop - 1];med = TM_mem[loop >> 1];for (int i = 0; i < loop; i++){aver += TM_mem[i];}aver /= loop;printf("Running Time of <%s>:\n\tLoop\t%10d times\n""\tMinimum\t%15.6f ms\n""\tMaximum\t%15.6f ms\n""\tMedian\t%15.6f ms\n""\tAverage\t%15.6f ms\n",str, loop,double(min) / 1000000, double(max) / 1000000,double(med) / 1000000, double(aver) / 1000000);
}

相关文章:

C/C++ 编程小工具

编写了 tools.h 和 tools.cpp&#xff0c;用于 Debug、性能测试、打印日志。 tools.h #ifndef TOOLS_H #define TOOLS_H#include <time.h> #include <fstream> #include <iostream> #include <random> #include <chrono> #include <vector&…...

第四十二章 使用 WS-ReliableMessaging

文章目录 第四十二章 使用 WS-ReliableMessaging从 Web 客户端发送一系列消息 第四十二章 使用 WS-ReliableMessaging IRIS 支持 WS-ReliableMessaging 规范的部分内容&#xff0c;如简介中所述。此规范提供了一种按顺序可靠地传递一系列消息的机制。本页介绍如何手动使用可靠…...

利士策分享,婚姻为何被称为大事?

利士策分享&#xff0c;婚姻为何被称为大事&#xff1f; 在历史的长河中&#xff0c;婚姻一直被视为人生中的头等大事&#xff0c;这一观念跨越时空&#xff0c;深深植根于各种文化和社会结构中。 古人为何将婚姻称为“大事”&#xff0c;这背后蕴含着丰富的社会、文化和心理寓…...

malloc源码分析之 ----- 你想要啥chunk

文章目录 malloc源码分析之 ----- 你想要啥chunktcachefastbinsmall binunsorted binbin处理top malloc源码分析之 ----- 你想要啥chunk tcache malloc源码&#xff0c;这里以glibc-2.29为例&#xff1a; void * __libc_malloc (size_t bytes) {mstate ar_ptr;void *victim;vo…...

软考系统分析师知识点五:数据通信与计算机网络

前言 今年报考了11月份的软考高级&#xff1a;系统分析师。 考试时间为&#xff1a;11月9日。 倒计时&#xff1a;32天。 目标&#xff1a;优先应试&#xff0c;其次学习&#xff0c;再次实践。 复习计划第一阶段&#xff1a;扫平基础知识点&#xff0c;仅抽取有用信息&am…...

windows客户端SSH连接ubuntu/linux服务器,三种网络连接:局域网,内网穿透(sakuraftp),虚拟局域网(zerotier)

windows客户端SSH连接ubuntu/linux服务器&#xff0c;三种网络连接&#xff1a;局域网&#xff0c;内网穿透&#xff08;sakuraftp&#xff09;&#xff0c;虚拟局域网&#xff08;zerotier&#xff09; 目录 SSH简述、三种网络连接特点SSH简述局域网内连接内网穿透&#xff08…...

Python 工具库每日推荐【openpyxl 】

文章目录 引言Python Excel 处理库的重要性今日推荐:openpyxl 工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:自动生成月度销售报告案例分析高级特性条件格式数据验证扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScript 设计…...

本地生活服务项目入局方案解析!本地生活服务商系统能实现怎样的作业效果?

当前&#xff0c;各大平台的本地生活服务业务日渐兴盛&#xff0c;提高创业者入局意向的同时&#xff0c;也让本地生活服务项目有哪些等问题也成为了多个创业者社群中的热议对象。而从目前的讨论情况来看&#xff0c;在创业者们所询问的众多本地生活服务项目中&#xff0c;通过…...

ML 系列:【13 】— Logistic 回归(第 2 部分)

文章目录 一、说明二、挤压方法三、Logistic 回归中的损失函数四、后记 一、说明 ​ 在这篇文章中&#xff0c;我们将深入研究 squashing 方法&#xff0c;这是有符号距离方法&#xff08;第 12节&#xff09;的一种很有前途的替代方案。squashing 方法通过提供增强的对异常值…...

45岁被裁员的程序员,何去何从?

在当今快速变化的技术行业&#xff0c;职业生涯的稳定性受到挑战。在45岁被裁员&#xff0c;对很多程序员来说&#xff0c;可能是一种惊慌失措的体验。然而&#xff0c;这个阶段也可以被视为一个重新审视和调整方向的机会。本文将对可能的出路进行全方位的分析&#xff0c;并提…...

云计算Openstack Neutron

OpenStack Neutron是OpenStack云计算平台中的网络服务组件&#xff0c;它为OpenStack提供了强大的网络连接功能。 一、基本概念 Neutron是一个网络服务项目&#xff0c;旨在为OpenStack提供网络连接。它允许用户创建和管理虚拟网络&#xff0c;包括子网、路由、安全组等&…...

PointNet++网络详解

数据集转换 数据集转换的意义在于将原本的 txt 点云文件转换为更方便运算的npy点云文件&#xff0c;同时&#xff0c;将原本的xyzrgb这 6 个维度转换为xyzrgbc&#xff0c;最后一个c维度代表该点云所属的类别。 for anno_path in anno_paths:print(anno_path)try:elements a…...

Java | Leetcode Java题解之第459题重复的子字符串

题目&#xff1a; 题解&#xff1a; class Solution {public boolean repeatedSubstringPattern(String s) {return kmp(s s, s);}public boolean kmp(String query, String pattern) {int n query.length();int m pattern.length();int[] fail new int[m];Arrays.fill(fa…...

【动态规划-最长公共子序列(LCS)】【hard】力扣1092. 最短公共超序列

给你两个字符串 str1 和 str2&#xff0c;返回同时以 str1 和 str2 作为 子序列 的最短字符串。如果答案不止一个&#xff0c;则可以返回满足条件的 任意一个 答案。 如果从字符串 t 中删除一些字符&#xff08;也可能不删除&#xff09;&#xff0c;可以得到字符串 s &#x…...

‌图片编辑为底片,智能工具助力,创作精彩视觉作品

在当今数字化时代&#xff0c;图像编辑已成为表达创意和美化视觉作品的重要手段。借助智能工具&#xff0c;即使是初学者也能轻松驾驭图片编辑。接下为大家展示图片编辑为底片图片的效果。 1.打开“首助编辑高手”&#xff0c;选择这里“图片批量处理”版块页面上 2.导入保存有…...

机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+

时间序列在回归预测的领域的重要性&#xff0c;不言而喻&#xff0c;在数学建模中使用及其频繁&#xff0c;但是你真的了解ARIMA、AR、MA么&#xff1f;ACF图你会看么&#xff1f;&#xff1f; 时间序列数据如何构造&#xff1f;&#xff1f;&#xff1f;&#xff0c;我打过不少…...

回溯算法之值子集和问题详细解读(附带Java代码解读)

子集和问题&#xff08;Subset Sum Problem&#xff09; 是一个经典的组合优化问题。问题可以这样描述&#xff1a; 给定一个整数集合和一个目标整数 target&#xff0c;我们需要从集合中选出若干个整数&#xff0c;使它们的和等于 target。如果这样的子集存在&#xff0c;返回…...

mysql游标的使用

说明&#xff1a; 虽然我们也可以通过筛选条件 WHERE 和 HAVING&#xff0c;或者是限定返回记录的关键字 LIMIT 返回一条记录&#xff0c;但是&#xff0c;却无法在结果集中像指针一样&#xff0c;向前定位一条记录、向后定位一条记录&#xff0c;或者是 随意定位到某一条记录 …...

linux udev详解

1.概念介绍 1.1sysfs文件系统 Linux 2.6以后的内核引入了sysfs文件系统&#xff0c;sysfs被看成是与proc、devfs和devpty同类别的文件系统&#xff0c;该文件系统是一个虚拟的文件系统&#xff0c;它可以产生一个包括所有系统硬件的层级视图&#xff0c;与提供进程和状态信息…...

EventSource和websocket该用哪种技术

EventSource&#xff08;也称为Server-Sent Events, SSE&#xff09;和WebSocket都是实现实时通信的技术&#xff0c;但是它们的设计目的和使用场景有所不同。在选择使用哪种技术时&#xff0c;需要根据具体的应用需求来决定。下面是一些关键点&#xff0c;可以帮助你做出选择&…...

Unity Figma Bridge:设计-开发一体化协同的技术架构解决方案

Unity Figma Bridge&#xff1a;设计-开发一体化协同的技术架构解决方案 【免费下载链接】UnityFigmaBridge Easily bring your Figma Documents, Components, Assets and Prototypes to Unity 项目地址: https://gitcode.com/gh_mirrors/un/UnityFigmaBridge Unity Fig…...

从门电路到芯片:拆解一个D触发器,看数字电路如何实现‘记忆’这个核心功能

从门电路到芯片&#xff1a;拆解一个D触发器&#xff0c;看数字电路如何实现‘记忆’这个核心功能 数字世界的每一个比特信息都需要被精确存储和传递&#xff0c;而实现这一功能的核心元件便是触发器。当我们按下电脑的电源键&#xff0c;屏幕上闪现的第一个像素到硬盘中保存的…...

告别手动挖洞:用Netsparker自动化扫描你的Web应用(附实战报告解读)

告别手动挖洞&#xff1a;用Netsparker自动化扫描你的Web应用&#xff08;附实战报告解读&#xff09; 在快节奏的Web开发环境中&#xff0c;安全测试往往成为项目后期被压缩的环节。传统手动渗透测试需要安全专家投入数十小时&#xff0c;而中小团队常面临资源不足的困境。Net…...

2026年最新推荐 很多一线老师都在用的英语作文批改工具

行业共性痛点拆解我们团队做英语教育技术落地5年&#xff0c;接触过全国上千位初高中英语老师&#xff0c;发现作文批改是大家公认的效率洼地。人工批改模式下&#xff0c;一个45人班的作文&#xff0c;每篇要改语法、逻辑、表达、扣题四个维度&#xff0c;最少花3分钟&#xf…...

Fast-GitHub:智能网络优化架构解析与分布式加速方案

Fast-GitHub&#xff1a;智能网络优化架构解析与分布式加速方案 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 在国内开发者面临G…...

告别卡顿!用Sunshine打造私人游戏串流服务器的完整指南

告别卡顿&#xff01;用Sunshine打造私人游戏串流服务器的完整指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否曾经梦想过在任何设备上流畅玩PC游戏&#xff1f;无论是躺…...

告别键盘连击烦恼:KeyboardChatterBlocker 智能解决方案详解

告别键盘连击烦恼&#xff1a;KeyboardChatterBlocker 智能解决方案详解 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 你是否曾经在打…...

告别桌面混乱!用Utools的「本地文件启动」功能,5分钟打造你的专属文件启动器

告别桌面混乱&#xff01;用Utools的「本地文件启动」功能&#xff0c;5分钟打造你的专属文件启动器 每次打开电脑&#xff0c;看到满屏的文件图标和杂乱无章的文件夹&#xff0c;是不是感觉工作效率瞬间降了一半&#xff1f;作为一名长期与文件打交道的专业人士&#xff0c;我…...

大语言模型推理引擎优化:架构挑战与关键技术解析

1. 大语言模型推理引擎的架构挑战与优化方向1.1 Transformer架构的固有瓶颈Transformer架构的自注意力机制存在两大核心瓶颈&#xff1a;计算复杂度和内存占用。对于序列长度N&#xff0c;自注意力层的计算复杂度为O(N)&#xff0c;这使得长文本处理成为性能黑洞。以2048 token…...

实测测评|零注册AI PDF翻译工具:保留排版\+OCR无损翻译,替代DeepL/谷歌翻译

在日常开发、学术科研、外文文献研读场景中&#xff0c;PDF翻译一直是高频刚需痛点。市面上主流的翻译工具普遍存在排版错乱、OCR收费、文件大小受限、强制登录注册等问题&#xff0c;尤其是学术论文、带表格/公式的技术手册、扫描版外文资料&#xff0c;翻译后的可用性极差。 …...