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

【C++风云录】创造视觉奇迹:探索C++图形编程的魅力与可能性

图形与界面:从SFML到Allegro,探索C++图形编程的世界

前言

随着计算机图形技术和界面设计的快速发展,图形编程在软件开发中变得越来越重要。C++作为一种功能强大的编程语言,为开发人员提供了丰富的图形编程工具和库。本文将介绍几个流行的C++图形编程库,包括SFML、Qt、OpenGL、DirectX、wxWidgets和Allegro。通过认识这些库,开发者可以更好地理解和应用图形编程的原理和技术。

欢迎订阅专栏:C++风云录

文章目录

  • 图形与界面:从SFML到Allegro,探索C++图形编程的世界
    • 前言
    • 1. SFML(Simple and Fast Multimedia Library)
        • 1.1 概述
        • 1.2 主要特点
        • 1.3 应用领域
    • 2. Qt
        • 2.1 概述
        • 2.2 跨平台特性
        • 2.3 GUI 编程功能
        • 2.4 网络编程功能
    • 3. OpenGL
        • 3.1 概述
        • 3.2 主要特点
        • 3.3 应用领域
    • 4. DirectX
        • 4.1 概述
        • 4.2 主要特点
        • 4.3 应用领域
    • 5. wxWidgets
        • 5.1 概述
        • 5.2 主要特点
        • 5.3 应用领域
    • 6. Allegro
        • 6.1 概述
        • 6.2 主要特点
        • 6.3 应用领域
    • 总结

1. SFML(Simple and Fast Multimedia Library)

1.1 概述

SFML(Simple and Fast Multimedia Library)是一个简单且快速的多媒体库,专注于多媒体功能和游戏开发。它提供了一套简单易用的API,支持2D图形渲染、音频播放、窗口管理等功能。SFML使用现代C++语言编写,可以运行在多个平台上,包括Windows、Mac和Linux。

1.2 主要特点
  • 简单易用的API:SFML提供了一套简单易用的API,使得开发者可以快速上手并迅速实现各种功能。
  • 跨平台支持:SFML可以在多个平台上运行,包括Windows、Mac和Linux,保证了开发者可以跨平台开发应用程序。
  • 丰富的功能支持:SFML支持2D图形渲染、音频播放、输入处理、窗口管理等功能,可以满足多种应用程序和游戏开发的需求。

以下是一个使用SFML绘制一个窗口并显示文本的示例代码:

#include <SFML/Graphics.hpp>int main() {sf::RenderWindow window(sf::VideoMode(800, 600), "SFML Window");sf::Font font;if (!font.loadFromFile("arial.ttf")) {return -1;}sf::Text text;text.setFont(font);text.setString("Hello, SFML!");text.setCharacterSize(24);text.setFillColor(sf::Color::White);text.setPosition(200, 200);while (window.isOpen()) {sf::Event event;while (window.pollEvent(event)) {if (event.type == sf::Event::Closed) {window.close();}}window.clear();window.draw(text);window.display();}return 0;
}
1.3 应用领域
  • 游戏开发:由于SFML专注于多媒体功能和游戏开发,因此它在游戏开发领域非常受欢迎。开发者可以利用SFML的图形渲染、音频播放和输入处理功能来创建各种类型的游戏。
  • 多媒体应用程序开发:除了游戏开发,SFML还可用于构建其他类型的多媒体应用程序,如音乐播放器、图像编辑器等。SFML提供了实现这些应用程序所需的功能和工具。

2. Qt

2.1 概述

Qt是一个跨平台应用程序开发框架,涵盖了GUI编程、网络编程、数据库访问等功能。它是一个功能强大且易于使用的工具,可以帮助开发人员快速构建现代化的应用程序。Qt使用C++语言进行开发,并提供了丰富的类库和工具,使得开发者可以轻松地创建跨平台的应用程序。

2.2 跨平台特性

Qt有着良好的跨平台支持,可以在多个操作系统上运行,包括Windows、Mac、Linux等。它使用了特定于操作系统的功能和API,以实现对各种平台的完全支持。开发者可以使用相同的代码和工具来构建针对不同平台的应用程序,大大提高了开发效率。

2.3 GUI 编程功能

Qt提供了丰富的GUI编程功能,使得开发者可以轻松地构建各种用户界面。它提供了一系列的GUI控件和布局管理器,可以快速搭建用户界面并实现各种交互功能。Qt还支持图形绘制、动画效果、图像处理等功能,使得界面设计更加丰富多样。

以下是一个使用Qt创建一个简单窗口并添加按钮的示例代码:

#include <QApplication>
#include <QMainWindow>
#include <QPushButton>int main(int argc, char *argv[]) {QApplication app(argc, argv);QMainWindow window;window.setGeometry(100, 100, 400, 300);QPushButton button("Click me", &window);button.setGeometry(10, 10, 80, 30);window.show();return app.exec();
}
2.4 网络编程功能

Qt还提供了网络编程功能,使得开发者可以轻松地实现网络通信和数据传输。Qt提供了一些类和函数,用于处理网络套接字、服务器和客户端的创建和管理。开发者可以使用这些功能来构建各种类型的网络应用程序,如聊天程序、文件传输等。

以上是Qt的一些主要功能和特点,开发者可以根据自己的需求选择合适的功能来构建各种类型的应用程序。Qt的文档和示例代码提供了更详细的信息和使用方法,开发者可以参考官方文档进行深入学习和开发。

3. OpenGL

3.1 概述

OpenGL是一个开放的图形库,用于开发二维和三维图形应用程序。它提供了一组API,可以实现高性能的图形渲染、图像处理和图形效果。OpenGL使用C或C++编写,并且是跨平台的。

3.2 主要特点
  • 高性能图形渲染:OpenGL采用基于硬件的图形加速技术,可以实现高性能的图形渲染,能够快速处理大量的图像数据。
  • 硬件和平台无关性:OpenGL是一个跨平台的图形库,可以在各种操作系统和硬件平台上运行,包括Windows、Mac、Linux等。
  • 开放性和可扩展性:OpenGL是一个开放的标准,支持第三方开发人员进行扩展和定制,开发者可以通过各种扩展来实现特定的图形效果和功能。
3.3 应用领域
  • 游戏开发:OpenGL在游戏开发领域得到广泛应用,可以实现各种类型的游戏,包括实时策略游戏、角色扮演游戏等。
  • 计算机图形学:OpenGL可以用于实现计算机图形学相关的算法和技术,如光照模型、物体投影等。
  • 科学可视化:OpenGL在科学可视化领域也非常有用,可以实现各种科学数据的可视化展示。

对于使用OpenGL开发应用程序,开发者需要了解OpenGL的基本原理和API,以及特定平台的相关知识。可以借助各种OpenGL教程和文档来学习和开发。
OpenGL是一个开放的图形库,用于开发二维和三维图形应用程序。它提供了一组API,可以实现高性能的图形渲染、图像处理和图形效果。OpenGL使用C或C++编写,并且是跨平台的。

以下是一个使用OpenGL绘制一个简单三角形的示例代码:

#include <GL/gl.h>
#include <GL/glut.h>void init() {glClearColor(0.0, 0.0, 0.0, 0.0);
}void display() {glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_TRIANGLES);glColor3f(1.0, 0.0, 0.0);glVertex2f(-0.6, -0.75);glColor3f(0.0, 1.0, 0.0);glVertex2f(0.6, -0.75);glColor3f(0.0, 0.0, 1.0);glVertex2f(0.0, 0.75);glEnd();glFlush();
}int main(int argc, char** argv) {glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowSize(400, 300);glutInitWindowPosition(100, 100);glutCreateWindow("OpenGL Window");init();glutDisplayFunc(display);glutMainLoop();return 0;
}

4. DirectX

4.1 概述

DirectX是一个由微软开发的多媒体和游戏开发API集合。它提供了一组丰富的功能,包括图形渲染、音频处理、输入设备管理等。DirectX使用C++语言进行开发,可以在Windows平台上进行图形和游戏开发。

4.2 主要特点
  • 强大的图形渲染功能:DirectX提供了强大的图形渲染功能,包括3D图形渲染、纹理映射、光照等。开发者可以利用这些功能来创建各种逼真的图形效果。
  • 音频处理和播放:DirectX提供了音频处理和播放功能,可以实现高质量的音频效果和音乐播放。
  • 输入设备管理:DirectX可以管理各种输入设备,如键盘、鼠标、游戏手柄等,方便开发者进行用户输入的处理。
4.3 应用领域
  • 游戏开发:DirectX在游戏开发领域得到广泛应用,可以实现各种类型的游戏,包括即时战略游戏、射击游戏等。
  • 多媒体应用程序:除了游戏开发,DirectX还可以用于构建其他类型的多媒体应用程序,如视频播放器、音乐编辑器等。

使用DirectX进行应用程序开发需要了解其相关API和功能,以及Windows平台的相关知识。Microsoft提供了完善的文档和示例代码,供开发者学习和参考。

以下是一个使用DirectX绘制一个简单的窗口并显示文本的示例代码:

#include <d3d9.h>LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hWnd, msg, wParam, lParam);
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {HWND hWnd;WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("DirectX Window"), NULL };RegisterClassEx(&wc);hWnd = CreateWindow(wc.lpszClassName, _T("DirectX Window"), WS_OVERLAPPEDWINDOW, 100, 100, 800, 600, NULL, NULL, wc.hInstance, NULL);IDirect3D9* pD3D;pD3D = Direct3DCreate9(D3D_SDK_VERSION);D3DPRESENT_PARAMETERS d3dpp;ZeroMemory(&d3dpp, sizeof(d3dpp));d3dpp.Windowed = TRUE;d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;d3dpp.EnableAutoDepthStencil = TRUE;d3dpp.AutoDepthStencilFormat = D3DFMT_D16;IDirect3DDevice9* pd3dDevice;pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &pd3dDevice);IDirect3DVertexBuffer9* pVB;pd3dDevice->CreateVertexBuffer(3 * sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &pVB, NULL);VOID* pVertices;pVB->Lock(0, sizeof(vertices), (void**)&pVertices, 0);memcpy(pVertices, vertices, sizeof(vertices));pVB->Unlock();D3DXMATRIX matWorld;D3DXMatrixIdentity(&matWorld);MSG msg;ZeroMemory(&msg, sizeof(msg));static bool active = true;while (msg.message != WM_QUIT) {if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) {TranslateMessage(&msg);DispatchMessage(&msg);}else {if (active) {pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 0);pd3dDevice->BeginScene();pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);pd3dDevice->SetStreamSource(0, pVB, 0, sizeof(CUSTOMVERTEX));pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);pd3dDevice->EndScene();pd3dDevice->Present(NULL, NULL, NULL, NULL);}}}pVB->Release();pd3dDevice->Release();pD3D->Release();UnregisterClass(wc.lpszClassName, wc.hInstance);return 0;
}

以上代码使用DirectX绘制了一个蓝色的三角形,并且使用键盘输入来控制窗口的显示。

请注意,上述代码只是示例,实际使用时,还需要正确设置和初始化相应的库和环境。详细的使用方法和示例可以在各个库的官方文档中找到。

5. wxWidgets

5.1 概述

wxWidgets是一个开源的C++图形用户界面(GUI)库,可以用于跨平台的应用程序开发。它提供了一套丰富的类库和工具,使得开发者能够快速构建跨平台的应用程序,并且具有良好的可移植性。wxWidgets支持各种操作系统,包括Windows、Mac和Linux。

5.2 主要特点
  • 跨平台支持:wxWidgets提供了对多个操作系统的支持,开发者可以使用相同的代码和工具来构建适用于不同平台的应用程序。
  • 可移植性:wxWidgets具有良好的可移植性,开发者可以在不同的平台上进行开发和部署,而无需进行太多的修改。
  • 丰富的控件库:wxWidgets提供了丰富的控件库,包括按钮、文本框、列表框等,使得界面开发变得非常简单。

以下是一个使用wxWidgets创建一个简单窗口并添加按钮的示例代码:

#include <wx/wx.h>class MyFrame : public wxFrame {
public:MyFrame(const wxString& title) : wxFrame(nullptr, wxID_ANY, title, wxDefaultPosition, wxSize(300, 200)) {wxPanel* panel = new wxPanel(this);wxButton* button = new wxButton(panel, wxID_ANY, "Click me", wxPoint(50, 50), wxDefaultSize);Connect(button->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MyFrame::OnButtonClick));}void OnButtonClick(wxCommandEvent& event) {wxMessageBox("Button clicked!", "Message");}wxDECLARE_EVENT_TABLE();
};wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)EVT_CLOSE(MyFrame::OnClose)
wxEND_EVENT_TABLE()class MyApp : public wxApp {
public:bool OnInit() override {MyFrame* frame = new MyFrame("wxWidgets Window");frame->Show();return true;}
};wxIMPLEMENT_APP(MyApp);
5.3 应用领域
  • 软件开发工具:wxWidgets可以用于开发各种类型的软件开发工具,如集成开发环境(IDE)、配置管理工具等。
  • 嵌入式系统:wxWidgets适用于嵌入式系统的开发,可以帮助开发者构建用户友好的界面,并实现与硬件的交互。
  • 桌面应用程序:wxWidgets还可用于构建各种类型的桌面应用程序,如文本编辑器、图片浏览器等。

开发者可以根据自己的需求和平台选择合适的GUI库,wxWidgets提供了一套完整和易用的工具和类库,适用于各种类型的应用程序开发。开发者可以参考wxWidgets官方文档和示例代码,深入学习和了解其功能和使用方法。

6. Allegro

6.1 概述

Allegro是一个用于游戏和多媒体应用程序开发的C/C++库。它提供了一系列的函数和类,用于处理图形、声音、输入、定时器等方面的功能。Allegro是开源的,并且可以在多个平台上使用,包括Windows、Mac和Linux。

6.2 主要特点
  • 跨平台支持:Allegro可以在多个操作系统上运行,包括Windows、Mac和Linux,开发者可以编写一次代码,在不同平台上进行编译和运行。
  • 图形和声音处理:Allegro提供了一套丰富的图形和声音处理功能,可以帮助开发者实现高质量的图形效果和音频效果。
  • 输入和响应事件:Allegro支持各种输入设备,包括键盘、鼠标、游戏手柄等,并且提供了响应事件的机制,使得开发者可以方便地处理用户输入。

以下是一个使用Allegro创建一个简单游戏窗口并显示图像的示例代码:

#include <allegro5/allegro5.h>
#include <allegro5/allegro_image.h>int main() {ALLEGRO_DISPLAY *display = NULL;ALLEGRO_BITMAP *image = NULL;if (!al_init()) {return -1;}if (!al_init_image_addon()) {return -1;}display = al_create_display(800, 600);if (!display) {return -1;}image = al_load_bitmap("image.png");if (!image) {return -1;}al_clear_to_color(al_map_rgb(0, 0, 0));al_draw_bitmap(image, 0, 0, 0);al_flip_display();al_rest(5.0);al_destroy_bitmap(image);al_destroy_display(display);return 0;
}
6.3 应用领域
  • 游戏开发:Allegro在游戏开发领域得到广泛应用,可以实现各种类型的游戏,包括2D和3D游戏。
  • 多媒体应用程序:Allegro可以用于构建其他类型的多媒体应用程序,如音乐播放器、图像编辑器等。

使用Allegro进行应用程序开发需要了解其相关API和功能,以及特定平台的相关知识。官方文档和示例代码提供了更详细的信息和使用方法,开发者可以参考官方文档进行深入学习和开发。

总结

本文介绍了几个常用的C++图形编程库,包括SFML、Qt、OpenGL、DirectX、wxWidgets和Allegro。通过阅读本文,读者可以了解每个库的概述、主要特点和应用领域。本文还提供了详细的C++实例代码,帮助读者快速上手和理解每个库的使用方式。图形编程是现代软件开发中不可或缺的一部分,通过掌握这些库,开发者将能够更好地应用图形编程技术,提升用户体验,开发出更加出色的应用程序。

相关文章:

【C++风云录】创造视觉奇迹:探索C++图形编程的魅力与可能性

图形与界面&#xff1a;从SFML到Allegro&#xff0c;探索C图形编程的世界 前言 随着计算机图形技术和界面设计的快速发展&#xff0c;图形编程在软件开发中变得越来越重要。C作为一种功能强大的编程语言&#xff0c;为开发人员提供了丰富的图形编程工具和库。本文将介绍几个流…...

常见的Nginx+Redis+MQ+DB架构设计

三高&#xff0c;复杂的架构 SQRS CAP 缓存&#xff0c;限流 【Redis&#xff0c;缓存】 cache-aside 缓存cache&#xff1a;数据源的副本 store 1. Read/Write Through Pattern 读写穿透模式 redis&#xff1a;放当前在线用户&#xff0c;热点数据...

vue+elementUI搭建动态表头的表格

前提&#xff1a;以下代码是vue2项目结合elementUi完成的 数据结构 后端传来的数据是两个list&#xff0c;一个表头的list&#xff0c;一个表格内容的list // 表头 headTableAtts: [{ columnLabel: 姓名, columnName: name },{ columnLabel: 年龄, columnName: age },{ colu…...

【ENSP】交换机和交换机之间实现静态路由

1.概念 三层交换机只能在Vlanif逻辑口配置iP地址 2.实现方法 交换机允许对应vlan通行&#xff0c;配置vlanif的ip地址&#xff0c;做静态路由 3.静态路由配置方法 ip route-static 目的网段 子网掩码 下一跳设备 LSW1三层交换机配置 u t m sys vlan batch 10 20 …...

2024.2.18力扣每日一题——N叉树的前序遍历

2024.2.18 题目来源我的题解方法一 深度优先遍历&#xff08;递归方式&#xff09;方法二 迭代方式&#xff08;栈实现&#xff09; 题目来源 力扣每日一题&#xff1b;题序&#xff1a;589 我的题解 方法一 深度优先遍历&#xff08;递归方式&#xff09; 与二叉树的前序遍…...

Taro活动列表中,对某一个活动添加分享按钮

采用data-留下分享链接的拼接参数 1.在item文件中写按钮 openType“share” <ButtonclassName{classes.rowRightShareButton}openType"share"data-share-transfer-id{lastGiftingTransferId}data-share-picture-url{shareUrl}data-share-title{shareTitle}onClic…...

深入理解计算机系统 家庭作业 2.65

/* 异或运算可以把同为1时变成0。 */ #include <stdio.h> #include <stdlib.h> int odd_ones(unsigned x); int main(void) { int x0xF00000016; printf("x的奇数位:%d",odd_ones(x)); return 0; } int odd_ones(unsigned x) { char…...

Java字节码

Java Agent概述 Java Agent是一种特殊类型的软件组件&#xff0c;它允许在Java虚拟机&#xff08;JVM&#xff09;运行时修改应用程序的字节码。这种技术通常用于性能监控、日志记录、系统调试等。Java Agent主要分为两类&#xff1a; 1. 启动时加载的Agent&#xff08;Pre-Ma…...

深入解析大数据体系中的ETL工作原理及常见组件

** 引言 关联阅读博客文章&#xff1a;探讨在大数据体系中API的通信机制与工作原理 关联阅读博客文章&#xff1a;深入理解HDFS工作原理&#xff1a;大数据存储和容错性机制解析 ** 在当今数字化时代&#xff0c;大数据处理已经成为了企业成功的重要组成部分。而在大数据处…...

条件变量的简易C++实现版

条件变量通常与互斥锁一起使用&#xff0c;用于线程间的同步。以下是条件变量常用的一些函数&#xff1a; ①std::condition_variable::wait(lock, pred)&#xff1a;线程调用此函数时&#xff0c;会原子性地释放锁并阻塞当前线程&#xff0c;等待另一个线程调用 notify_one 或…...

目标检测评价标准

主要借鉴&#xff1a;https://github.com/rafaelpadilla/Object-Detection-Metrics?tabreadme-ov-file 主要评价指标、术语&#xff1a; Intersection Over Union (IOU)&#xff1a;两个检测框交集面积与并集面积的比值 True Positive (TP)&#xff1a;IOU大于阈值的检测框…...

C51-- 蓝牙,WIFI模块

HC-08蓝牙模块: 蓝牙 -- 最好用的 串口透传 模块 透传 -- 透明传送&#xff0c;指的是在数据传输的过程中&#xff0c;通过无线的方式这组数据不发生任何形式的改变&#xff0c; 仿佛传输过程是透明的&#xff0c;同时保证传输质量&#xff0c;最终原封不动的传送到接收者手…...

HN热帖|替换Redis的一场赛跑

3 月 21 日&#xff0c; Redis Ltd. 宣布了一项重大决定&#xff1a;Redis “内存数据存储”项目从 Redis 7.4 版本开始将以非自由的、源代码可用的许可证发布。这一消息并不受欢迎&#xff0c;但也并非完全意外。这次的变化的不同寻常之处是市面上已经有了多个 Redis 替代品可…...

Kubernetes(k8s):网络插件之Calico安装与详解

Kubernetes&#xff08;k8s&#xff09;&#xff1a;网络插件之Calico安装与详解 1、什么是Calico&#xff1f;2、安装和配置Calico&#xff08;控制节点-master执行&#xff09;3、配置网络策略4、 Calico 的 yaml 文件部分详解1、ConfigMap配置2、DaemonSet 配置 5、calico-k…...

Chrome base 库详解:工具类和常用类库

Chrome浏览器使用了一个强大的库名为base&#xff0c;它包括了许多工具类和常用类库&#xff0c;以支持Chrome的底层功能和性能优化。在本文中&#xff0c;我们将详细阐述base库中的每个子项&#xff0c;并提供示例代码来展示其用法。 base 库的基本结构 Chrome的base库是一个…...

Nginx开发实战三:替换请求资源中的固定数据

文章目录 1.效果预览2.下载Nginx解压并初始化3.字符串替换模块安装4.修改nginx配置文件并重启 1.效果预览 页面初始效果 页面替换后效果 说明:页面是内网的一个地址&#xff0c;我们通过nginx可以很便捷的将其改为外网访问&#xff0c;但是在外网访问这个地址后&#xff0c…...

如何在Python中实现多线程和多进程?

如何在Python中实现多线程和多进程&#xff1f; 在Python中&#xff0c;多线程和多进程是实现并发编程的两种主要方式。它们各自有其特点和适用场景。下面将分别介绍如何在Python中实现多线程和多进程&#xff0c;并探讨它们的优缺点。 一、多线程 Python的标准库提供了thre…...

Redis面试题10道

1、什么是 Redis&#xff1f;简述它的优缺点&#xff1f; Redis 的全称是&#xff1a;Remote Dictionary.Server&#xff0c;本质上是一个 Key-Value 类型的内存数据库&#xff0c;很像 memcached&#xff0c;整个数据库统统加载在内存当中进行操作&#xff0c;定期通过异步操作…...

vue3从精通到入门6:v-memo指令

v-memo是一个用于优化组件渲染性能的指令。它允许你根据某个条件来缓存组件的虚拟 DOM 树&#xff0c;从而在条件没有变化时避免不必要的重新渲染。这对于那些接收大量 props 且渲染成本较高的组件来说非常有用。 用法 v-memo 指令接受一个表达式或一个数组作为参数&#xff0…...

【算法集训】基础算法:双指针

344. 反转字符串 // 双指针思路 void reverseString(char* s, int sSize) {int i 0,j sSize - 1;while(i < j) {char tmp s[i];s[i] s[j];s[j] tmp;i , j --;} }392. 判断子序列 // 双指针 bool isSubsequence(char* s, char* t) {// 定义s和t的下标指针int i 0, j …...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...