免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

上一个内容:5.ImGui-按钮

IMGui中表示颜色的的结构体

ImVec4和ImU32,如下图红框

它们的用法

ImVec4 color4(1.0f, 0.0f, 0.0f, 1.0f)// RGBA值表示颜色,rgb是红绿蓝,a表示透明度,它的取值范围是0.0到1.0
ImU32 color32 = IM_COL32(255,0,0,255); // 使用IM_COL32将RGBA值转为ImU32类型,取值范围是0到255

如下图使用Windows系统自带的画图软件,可以查看rgb的值,这个值对应ImU32的写法,ImVec4的写法是一种百分比的写法不够直观

在我们的代码中使用ImU32

色板从源码中找,如下图是源码中实例

然后来到ImGui的源码中点击下图红框的按钮

然后输入搜索关键字,如下图红框

然后在搜索结果找到directx11的,双击它

然后就找到了色板的代码,如下图红框

色板的代码说明

ImGui::ColorEdit3这个会创建一个色板的控件,在控件里选择一个颜色后,会返回给&seBan这个变量

 ImGui::ColorEdit3("clear color", (float*)&seBan);

色板的变量只能是 ImVec4类型,否则在色板中选择颜色会有问题

然后设置颜色

完整代码

#include "main.h"  // 包含程序所需的头文件(包含ImGui、DirectX等声明,具体内容在main.h中定义)// 全局变量:存储DirectX 11核心资源和窗口状态(整个程序共享,方便各函数访问)
static UINT                     g_ResizeWidth = 0, g_ResizeHeight = 0; // 窗口调整大小时的新宽高(由消息处理函数记录,主循环处理)
static ID3D11Device* g_pd3dDevice = nullptr;                          // D3D11设备对象(核心!用于创建纹理、缓冲区等渲染资源)
static ID3D11DeviceContext* g_pd3dDeviceContext = nullptr;             // D3D11设备上下文(用于执行绘制、清空等渲染命令)
static IDXGISwapChain* g_pSwapChain = nullptr;                          // 交换链(双缓冲区机制,避免画面闪烁,负责显示渲染结果)
static ID3D11RenderTargetView* g_mainRenderTargetView = nullptr;        // 主渲染目标视图(绑定交换链的后台缓冲区,ImGui绘制的内容会输出到这里)
static bool                     g_SwapChainOccluded = false;           // 标记交换链是否被遮挡(如窗口被覆盖,用于优化性能)// 声明ImGui的Win32消息处理函数(来自imgui_impl_win32.cpp,用于让ImGui处理鼠标/键盘输入)
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);static void HelpMarker(const char* desc)
{ImGui::TextDisabled("(?)");if (ImGui::BeginItemTooltip()){ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);ImGui::TextUnformatted(desc);ImGui::PopTextWrapPos();ImGui::EndTooltip();}
}// 窗口消息处理函数:处理所有窗口事件(如点击、关闭、调整大小等)
// 参数:
// - hWnd:窗口句柄(标识当前窗口)
// - msg:消息类型(如WM_SIZE表示窗口大小改变)
// - wParam:消息附加参数(如WM_SIZE中表示 resize 类型)
// - lParam:消息附加参数(如WM_SIZE中存储新的宽高)
// 返回值:LRESULT类型(消息处理结果,0表示成功处理)
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{// 让ImGui先处理消息(如果是ImGui的UI控件触发的事件,优先由ImGui处理)if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))return true;  // ImGui已处理,直接返回// 根据消息类型处理不同事件switch (msg){case WM_SIZE:  // 窗口大小改变事件if (wParam == SIZE_MINIMIZED)  // 如果是窗口最小化,无需处理渲染相关return 0;// 从lParam中提取新的窗口尺寸:低16位是宽度,高16位是高度g_ResizeWidth = (UINT)LOWORD(lParam);  // 记录新宽度g_ResizeHeight = (UINT)HIWORD(lParam); // 记录新高度return 0;case WM_SYSCOMMAND:  // 系统命令事件(如ALT+空格调出窗口菜单)// 禁用ALT菜单(避免菜单遮挡ImGui控件,影响操作体验)if ((wParam & 0xfff0) == SC_KEYMENU)return 0;break;  // 其他系统命令交给默认处理case WM_DESTROY:  // 窗口销毁事件(如点击关闭按钮)::PostQuitMessage(0);  // 发送退出消息,主循环会捕获并结束程序return 0;}// 其他未处理的消息,交给Windows系统默认处理return ::DefWindowProcW(hWnd, msg, wParam, lParam);
}// 创建渲染目标视图:将交换链的后台缓冲区绑定为渲染目标(ImGui绘制的内容会输出到这里)
void CreateRenderTarget()
{ID3D11Texture2D* pBackBuffer = nullptr;  // 临时存储交换链的后台缓冲区// 从交换链获取后台缓冲区(参数0表示第一个缓冲区,IID_ID3D11Texture2D指定缓冲区类型)g_pSwapChain->GetBuffer(0, IID_PPV_ARGS(&pBackBuffer));// 用D3D设备创建渲染目标视图(将后台缓冲区转换为可渲染的目标)g_pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, &g_mainRenderTargetView);// 释放临时缓冲区(渲染目标视图已引用它,无需保留此指针)pBackBuffer->Release();
}// 清理渲染目标视图:释放资源,避免内存泄漏
void CleanupRenderTarget()
{// 释放渲染目标视图(COM对象需调用Release()减少引用计数,为0时自动释放内存)if (g_mainRenderTargetView) { g_mainRenderTargetView->Release(); g_mainRenderTargetView = nullptr; }
}// 创建D3D11设备和交换链:初始化DirectX渲染环境
// 参数:hWnd - 窗口句柄(渲染结果会显示在这个窗口)
// 返回值:bool - 成功创建返回true,失败返回false
bool CreateDeviceD3D(HWND hWnd)
{// 初始化交换链描述(定义交换链的属性,告诉系统如何创建交换链)DXGI_SWAP_CHAIN_DESC sd;ZeroMemory(&sd, sizeof(sd));  // 清空结构体,避免随机值导致错误sd.BufferCount = 2;           // 缓冲区数量(2=双缓冲,避免画面闪烁)sd.BufferDesc.Width = 0;      // 缓冲区宽度(0=自动匹配窗口宽度)sd.BufferDesc.Height = 0;     // 缓冲区高度(0=自动匹配窗口高度)sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;  // 像素格式(32位色,含透明度)sd.BufferDesc.RefreshRate.Numerator = 60;  // 刷新率分子(60=60Hz)sd.BufferDesc.RefreshRate.Denominator = 1; // 刷新率分母(60/1=60Hz)sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;  // 允许切换显示模式(如全屏/窗口)sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;   // 缓冲区用途(作为渲染目标)sd.OutputWindow = hWnd;       // 绑定的窗口(渲染结果显示到该窗口)sd.SampleDesc.Count = 1;      // 多重采样数量(1=无抗锯齿,性能优先)sd.SampleDesc.Quality = 0;    // 采样质量(0=默认)sd.Windowed = TRUE;           // 窗口模式(TRUE=窗口,FALSE=全屏)sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;  // 交换效果(交换后丢弃后台数据,性能最好)UINT createDeviceFlags = 0;   // 创建设备的标志(0=默认,调试时可加D3D11_CREATE_DEVICE_DEBUG)// createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;  // 调试模式(需安装DirectX SDK)D3D_FEATURE_LEVEL featureLevel;  // 存储实际支持的D3D版本(如11.0、10.0)// 支持的D3D版本列表(优先11.0,不支持则用10.0)const D3D_FEATURE_LEVEL featureLevelArray[2] = { D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_0, };// 创建设备、设备上下文和交换链(DirectX核心函数)HRESULT res = D3D11CreateDeviceAndSwapChain(nullptr, D3D_DRIVER_TYPE_HARDWARE,  // 使用硬件加速(显卡渲染)nullptr, createDeviceFlags,         // 无软件渲染模块,创建标志featureLevelArray, 2,               // 支持的D3D版本列表及数量D3D11_SDK_VERSION, &sd,             // SDK版本,交换链描述&g_pSwapChain, &g_pd3dDevice,       // 输出交换链和设备&featureLevel, &g_pd3dDeviceContext // 输出支持的版本和设备上下文);// 如果硬件加速失败(如显卡不支持D3D11),尝试软件渲染(WARP驱动)if (res == DXGI_ERROR_UNSUPPORTED)res = D3D11CreateDeviceAndSwapChain(nullptr, D3D_DRIVER_TYPE_WARP,   // 软件渲染(性能较差,兼容旧设备)nullptr, createDeviceFlags,featureLevelArray, 2,D3D11_SDK_VERSION, &sd,&g_pSwapChain, &g_pd3dDevice,&featureLevel, &g_pd3dDeviceContext);if (res != S_OK)  // 创建失败(S_OK表示成功)return false;CreateRenderTarget();  // 创建渲染目标视图return true;
}// 清理D3D资源:释放所有DirectX相关对象,避免内存泄漏
void CleanupDeviceD3D()
{CleanupRenderTarget();  // 先清理渲染目标// 释放COM对象(按依赖顺序释放,避免资源冲突)if (g_pSwapChain) { g_pSwapChain->Release(); g_pSwapChain = nullptr; }if (g_pd3dDeviceContext) { g_pd3dDeviceContext->Release(); g_pd3dDeviceContext = nullptr; }if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = nullptr; }
}// 主函数:程序入口,控制整个程序的生命周期
int main() {// -------------------------- 步骤1:DPI适配(解决高分辨率屏幕UI模糊问题) --------------------------ImGui_ImplWin32_EnableDpiAwareness();  // 开启ImGui对系统DPI的感知// 获取主显示器的DPI缩放比例(如4K屏幕可能为2.0,1080P可能为1.0)float main_scale = ImGui_ImplWin32_GetDpiScaleForMonitor(::MonitorFromPoint(POINT{ 0, 0 }, MONITOR_DEFAULTTOPRIMARY)  // 获取主显示器);// -------------------------- 步骤2:创建Windows窗口(ImGui需要依附的窗口载体) --------------------------// 定义窗口类(描述窗口的基本属性,如消息处理函数、图标等)WNDCLASSEXW wc = {sizeof(wc),                  // 结构体大小CS_CLASSDC,                  // 窗口类风格(使用专属设备上下文,避免绘图冲突)WndProc,                     // 消息处理函数0L, 0L,                      // 额外数据(未使用)GetModuleHandle(nullptr),    // 程序实例句柄nullptr, nullptr, nullptr, nullptr,  // 图标、光标、背景等(用默认)L"ImGui Example",            // 窗口类名(自定义,后续创建窗口需使用)nullptr                      // 小图标(默认)};::RegisterClassExW(&wc);  // 注册窗口类(向系统注册这个窗口类型)// 创建窗口(生成实际窗口)HWND hwnd = ::CreateWindowW(wc.lpszClassName,            // 窗口类名(对应注册的类)L"Dear ImGui DirectX11 Example",  // 窗口标题WS_OVERLAPPEDWINDOW,         // 窗口风格(标准窗口,带标题栏、关闭按钮等)100, 100,                    // 初始位置(屏幕左上角x=100,y=100)(int)(1280 * main_scale),    // 宽度(1280 * DPI缩放,适配高分辨率)(int)(800 * main_scale),     // 高度(800 * DPI缩放)nullptr, nullptr,            // 父窗口、菜单(无)wc.hInstance, nullptr        // 程序实例、额外参数);// -------------------------- 步骤3:初始化DirectX 11(创建渲染环境) --------------------------if (!CreateDeviceD3D(hwnd))  // 调用函数创建D3D设备和交换链,失败则清理资源并退出{CleanupDeviceD3D();::UnregisterClassW(wc.lpszClassName, wc.hInstance);return 1;  // 返回1表示程序异常退出}// 显示窗口(创建后默认隐藏,需手动显示)::ShowWindow(hwnd, SW_SHOWDEFAULT);::UpdateWindow(hwnd);  // 刷新窗口,确保立即显示// -------------------------- 步骤4:初始化ImGui(配置UI环境) --------------------------IMGUI_CHECKVERSION();  // 检查ImGui版本(确保编译版本与运行时一致)ImGui::CreateContext(); // 创建ImGui上下文(UI的"全局环境")ImGuiIO& io = ImGui::GetIO(); (void)io;  // 获取IO对象(管理输入输出,如键盘、帧率)io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;  // 开启键盘导航(方向键、Tab操作UI)io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad;   // 开启手柄导航(支持游戏手柄操作)// -------------------------- 步骤5:设置UI缩放(适配DPI,避免高分辨率下UI过小) --------------------------ImGuiStyle& style = ImGui::GetStyle();style.ScaleAllSizes(main_scale);  // 缩放所有UI元素(按钮、文本等)style.FontScaleDpi = main_scale;  // 缩放字体大小// -------------------------- 步骤6:初始化ImGui后端(连接ImGui与系统/渲染API) --------------------------ImGui_ImplWin32_Init(hwnd);       // 初始化Win32后端(处理窗口消息、输入)ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext);  // 初始化DX11后端(负责渲染UI)// -------------------------- 步骤7:程序状态变量(控制UI显示) --------------------------bool show_demo_window = true;    // 是否显示ImGui演示窗口bool show_another_window = false; // 是否显示"另一个窗口"ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); // 窗口背景色(浅蓝色)//ImU32 seBan = IM_COL32(89, 255, 199, 255);// 初始化色板的颜色ImVec4 seBan = ImVec4(0.45f, 0.55f, 0.60f, 1.00f);// -------------------------- 步骤8:主循环(程序的核心,持续运行直到退出) --------------------------bool done = false;  // 控制循环是否结束(true=退出)while (!done){// -------------------------- 8.1 处理窗口消息(如关闭、点击等) --------------------------MSG msg;  // 存储消息的结构体// 从消息队列中获取消息(PM_REMOVE表示获取后移除,避免重复处理)while (::PeekMessage(&msg, nullptr, 0U, 0U, PM_REMOVE)){::TranslateMessage(&msg);  // 翻译消息(如键盘按键转字符)::DispatchMessage(&msg);   // 分发消息到WndProc处理if (msg.message == WM_QUIT)  // 收到退出消息(如点击关闭按钮)done = true;  // 标记循环结束}if (done)break;  // 退出循环// -------------------------- 8.2 处理窗口遮挡(优化性能) --------------------------// 如果交换链被遮挡(如窗口被覆盖),且确认遮挡状态:if (g_SwapChainOccluded && g_pSwapChain->Present(0, DXGI_PRESENT_TEST) == DXGI_STATUS_OCCLUDED){::Sleep(10);  // 休眠10ms,减少CPU占用continue;     // 跳过本次循环,不渲染}g_SwapChainOccluded = false;  // 重置遮挡状态// -------------------------- 8.3 处理窗口大小调整(避免画面拉伸) --------------------------if (g_ResizeWidth != 0 && g_ResizeHeight != 0)  // 如果有新的窗口尺寸{CleanupRenderTarget();  // 先清理旧的渲染目标// 调整交换链缓冲区大小(匹配新窗口尺寸)g_pSwapChain->ResizeBuffers(0, g_ResizeWidth, g_ResizeHeight, DXGI_FORMAT_UNKNOWN, 0);g_ResizeWidth = g_ResizeHeight = 0;  // 重置尺寸变量CreateRenderTarget();  // 创建新的渲染目标(适配新尺寸)}// -------------------------- 8.4 开始ImGui新帧(准备绘制UI) --------------------------ImGui_ImplDX11_NewFrame();  // DX11后端准备新帧ImGui_ImplWin32_NewFrame(); // Win32后端准备新帧ImGui::NewFrame();          // ImGui核心准备(通知ImGui可以开始定义UI了)// -------------------------- 8.5 定义UI界面(核心:这里是你要显示的UI) --------------------------/**ImGui::Begin()函数说明:函数声明:bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0);参数:- name:窗口标题(唯一标识,相同标题会合并窗口)- p_open:控制窗口是否显示的指针(关闭窗口时会将其设为false)- flags:窗口标志(组合使用,如禁用标题栏、禁止移动等)*/bool i = true;  // 控制窗口是否显示(true=显示)// 创建一个自定义窗口:标题为"我的IMGui",禁止标题栏(NoTitleBar)和移动(NoMove)ImGui::Begin("我的IMGui", &i);// 这里可以添加其他UI控件(如按钮、文本等),目前是空窗口// 例如:ImGui::Text("这是我的第一个ImGui窗口!");// 长文本ImGui::TextWrapped("This 521 ""aiamaiamaiamaiamaiamaiamaiamaiamaiamaiamaiam");ImGui::TextColored(ImVec4(1.0f, 0.0f, 1.0f, 1.0f), "Pink");ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "Yellow");// 带颜色的文本框ImGui::TextColored(ImVec4(1.0f, 0.0f, 1.0f, 1.0f), "Pink2");ImGui::SameLine();ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "Yellow2");ImGui::SameLine();// 鼠标悬浮上去会显示悬浮文本框,悬浮文本框会显示52amHelpMarker("52am");// ImGui::ColorEdit3这个会创建一个色板的控件,在控件里选择一个颜色后,会返回给&seBan这个变量ImGui::ColorEdit3("clear color", (float*)&seBan); // Edit 3 floats representing a color// ImGui中通过PushStyleColor()临时修改按钮在不同状态下的颜色// 注意:每次PushStyleColor()后必须用PopStyleColor()恢复默认样式,否则会影响后续UI元素// 1. 修改按钮"正常状态"(未被鼠标悬停、未被点击)的背景色// 参数1:ImGuiCol_Button - 指定修改"按钮正常状态"的颜色// 参数2:{1.0f, 1.0f, 0.0f, 1.0f} - RGBA颜色值(每个分量范围0.0f~1.0f)//   R=1.0f(红色满值)、G=1.0f(绿色满值)、B=0.0f(蓝色无)→ 混合为黄色//   A=1.0f(透明度100%,完全不透明)ImGui::PushStyleColor(ImGuiCol_Button, seBan);// 2. 修改按钮"鼠标悬停状态"(鼠标放在按钮上但未点击)的背景色// 参数1:ImGuiCol_ButtonHovered - 指定修改"按钮被悬停时"的颜色// 参数2:{1.0f, 0.0f, 0.0f, 1.0f} → 红色(R满值,G、B无),完全不透明ImGui::PushStyleColor(ImGuiCol_ButtonHovered, { 1.0f,0.0f,0.0f, 1.0f });// 3. 修改按钮"激活状态"(鼠标按下按钮但未松开)的背景色// 参数1:ImGuiCol_ButtonActive - 指定修改"按钮被点击时"的颜色// 参数2:{0.0f, 1.0f, 0.0f, 1.0f} → 绿色(G满值,R、B无),完全不透明ImGui::PushStyleColor(ImGuiCol_ButtonActive, { 0.0f,1.0f,0.0f, 1.0f });if (ImGui::Button("anNiu")) {// 点击按钮执行的代码ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "dianjianniu");}ImGui::PopStyleColor(3);ImGui::End();  // 结束窗口定义(必须与Begin配对,否则崩溃)// -------------------------- 8.6 渲染UI(将定义的UI绘制到屏幕) --------------------------ImGui::Render();  // 生成绘制命令(将UI转换为显卡可执行的指令)// 计算背景色(考虑透明度:clear_color.w是透明度,乘以RGB值)const float clear_color_with_alpha[4] = {clear_color.x * clear_color.w,clear_color.y * clear_color.w,clear_color.z * clear_color.w,clear_color.w};// 设置渲染目标(告诉显卡:接下来的绘制输出到主渲染目标)g_pd3dDeviceContext->OMSetRenderTargets(1, &g_mainRenderTargetView, nullptr);// 清空屏幕(用背景色填充,避免上一帧画面残留)g_pd3dDeviceContext->ClearRenderTargetView(g_mainRenderTargetView, clear_color_with_alpha);// 渲染ImGui的UI(执行绘制命令,将UI画到屏幕)ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());// -------------------------- 8.7 显示画面(交换前后缓冲区,展示渲染结果) --------------------------// Present函数:交换前后缓冲区(后台缓冲区是刚渲染的画面,前台是正在显示的)// 参数1:1=开启垂直同步(VSync,防止画面撕裂,帧率与显示器一致);0=关闭(帧率更高)HRESULT hr = g_pSwapChain->Present(1, 0);   // 开启垂直同步// HRESULT hr = g_pSwapChain->Present(0, 0); // 关闭垂直同步// 检查交换链是否被遮挡(用于后续优化)g_SwapChainOccluded = (hr == DXGI_STATUS_OCCLUDED);}// -------------------------- 步骤9:程序退出,清理资源 --------------------------// 关闭ImGui后端ImGui_ImplDX11_Shutdown();ImGui_ImplWin32_Shutdown();ImGui::DestroyContext();  // 销毁ImGui上下文// 清理D3D资源CleanupDeviceD3D();// 销毁窗口和窗口类::DestroyWindow(hwnd);::UnregisterClassW(wc.lpszClassName, wc.hInstance);return 0;  // 程序正常退出
}


img

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

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

相关文章

【C++】Vector完全指南:动态数组高效使用

0. 官方文档 vector 1. vector介绍 Vector 简单来说就是顺序表,是一个可以动态增长的数组。 vector是表示可变大小数组的序列容器。 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c…

关于无法导入父路径的问题

问题重现 有下面的代码: from ..utils import Config,set_DATA_PATH DATA_PATH set_DATA_PATH()报错如下:from ..utils import Config,set_DATA_PATH ImportError: attempted relative import beyond top-level package解决方案 #获取当前脚本所在目录的…

C/C++包管理工具:Conan

Conan是一个专为C/C设计的开源、去中心化、跨平台的包管理器,致力于简化依赖管理和二进制分发流程。Conan基于Python进行开发,支持与主流的构建系统集成,提供了强大的跨平台和交叉编译能力。通过Conan,开发者可以高效的创建、共享…

核心高并发复杂接口重构方案

核心高并发复杂接口重构方案 一、重构目标与原则 核心目标 提升接口性能:降低响应时间,提高吞吐量,降低资源使用 增强可维护性:拆解复杂逻辑,模块化设计,降低后续迭代成本 保障稳定性:通过架构优化和灰度策略,确保重构过程无服务中断 提升扩展性:设计灵活的扩展点,…

C++容器内存布局与性能优化指南

C容器的内存布局和缓存友好性对程序性能有决定性影响。理解这些底层机制,能帮你写出更高效的代码。 一、容器内存布局概述 不同容器在内存中的组织方式差异显著,这直接影响了它们的访问效率和适用场景。容器类型内存布局特点元数据位置元素存储位置std::…

Beautiful.ai:AI辅助PPT工具高效搞定排版,告别熬夜做汇报烦恼

你是不是每次做 PPT 都头大?找模板、调排版、凑内容,熬大半夜出来的东西还没眼看?尤其是遇到 “明天就要交汇报” 的紧急情况,打开 PPT 软件半天,光标在空白页上晃来晃去,连标题都想不出来 —— 这种抓瞎的…

阿里云携手MiniMax构建云原生数仓最佳实践:大模型时代的 Data + AI 数据处理平台

MiniMax简介MiniMax是全球领先的通用人工智能科技公司。自2022年初成立以来,MiniMax以“与所有人共创智能”为使命,致力于推动人工智能科技前沿发展,实现通用人工智能(AGI)。MiniMax自主研发了一系列多模态通用大模型,…

一键生成PPT的AI工具排名:2025年能读懂你思路的AI演示工具

人工智能正在重塑PPT制作方式,让专业演示变得触手可及。随着人工智能技术的飞速发展,AI生成PPT工具已成为职场人士、学生和创作者提升效率的得力助手。这些工具通过智能算法,能够快速将文本、数据或创意转化为结构化、视觉化的演示文稿&#…

数据库基础知识——聚合函数、分组查询

目录 一、聚合函数 1.1 count 1.1.1 统计整张表中所有记录的总条数 1.1.2 统计单列的数据 1.1.3 统计单列记录限制条件 1.2 sum 1.3 avg 1.4 max, min 二、group by 分组查询 2.1 语法 2.2 示例 2.3 having 一、聚合函数 常用的聚合函数 函数说明count ([distinc…

改 TDengine 数据库的时间写入限制

一 sql连数据库改 改 TDengine 数据库的时间写入限制 之前默认了可写入时间为一个月,调整为10年,方便测试: SHOW DATABASES;use wi; SELECT CONCAT(ALTER TABLE , table_name, KEEP 3650;) FROM information_schema.ins_tables WHERE db_…

数码视讯TR100-OTT-G1_国科GK6323_安卓9_广东联通原机修改-TTL烧录包-可救砖

数码视讯TR100-OTT-G1_国科GK6323_安卓9_广东联通原机修改-TTL烧录包-可救砖刷机教程数码视讯 TR100-G1 TTL 烧录刷机教程固件由广东联通 TR100-G1 28 原版修改,测试一切正常1、把刷机文件解压出 备用,盒子主板接好 TTL,不会接自行查找 TTl 接…

TVS防护静电二极管选型需要注意哪些参数?-ASIM阿赛姆

TVS防护静电二极管选型关键参数详解TVS(Transient Voltage Suppressor)二极管作为电路防护的核心器件,在电子设备静电防护(ESD)、浪涌保护等领域发挥着重要作用。本文将系统性地介绍TVS二极管选型过程中需要重点关注的参数指标,帮助工程师做出合理选择。…

项目经理为什么要有一张PMP®认证?

在项目管理日益成为企业核心竞争力的今天,PMP已成为项目经理职业发展的重要“通行证”。这张由美国项目管理协会(PMI)颁发的全球公认证书,不仅是专业能力的象征,更在职业竞争力、项目成功率、团队协作等多个维度为项目…

Qt中QSettings的键值使用QDataStream进行存储

1. QDataStream介绍 数据流是编码信息的二进制流,与主机的操作系统、CPU 或字节顺序完全无关。例如,Windows 系统下 PC 写入的数据流可由运行 Solaris 的 Sun SPARC 读取。 您还可以使用数据流读/写raw unencoded binary data 。如果需要 "解析 &…

Typer 命令行工具使用示例

Typer 命令行工具使用示例 示例1:简单问候程序 代码 import typerapp typer.Typer()app.command() def greet(name: str):"""简单的问候命令"""typer.echo(f"Hello {name}!")if __name__ "__main__":app()使用…

关于CAN总线bus off 理论标准 vs 工程实践

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

CAN堆栈

PDU映射到HOH将硬件对象句柄HOH抽象成为硬件抽象层CanIf将pdu映射到硬件对象句柄上一个HOH代表一个Can控制器的一个消息缓冲区发送缓存区当所有Can硬件资源被占用时,LPDU存储在缓冲区中。发送取消为了解决优先级反转的问题,高优先级L-PDU会请求取消低优先…

sub3G和sub6G的区别和联系

Sub-3G 和 Sub-6G 的区别与联系Sub-3G 和 Sub-6G 是无线通信中频段的不同分类,尤其在4G LTE和5G网络中,定义了无线信号传输的不同频率范围。具体来说,Sub-3G 通常指的是低于3 GHz的频段,而 Sub-6G 是指低于6 GHz的频段。这些频段的…

【数据可视化-106】华为2025上半年财报分析:用Python和Pyecharts打造炫酷可视化大屏

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

Scikit-learn Python机器学习 - 特征预处理 - 归一化 (Normalization):MinMaxScaler

锋哥原创的Scikit-learn Python机器学习视频教程: 2026版 Scikit-learn Python机器学习 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程主要讲解基于Scikit-learn的Python机器学习知识,包括机器学习概述,特征工程(数据…