【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++图形编程的魅力与可能性
图形与界面:从SFML到Allegro,探索C图形编程的世界 前言 随着计算机图形技术和界面设计的快速发展,图形编程在软件开发中变得越来越重要。C作为一种功能强大的编程语言,为开发人员提供了丰富的图形编程工具和库。本文将介绍几个流…...
常见的Nginx+Redis+MQ+DB架构设计
三高,复杂的架构 SQRS CAP 缓存,限流 【Redis,缓存】 cache-aside 缓存cache:数据源的副本 store 1. Read/Write Through Pattern 读写穿透模式 redis:放当前在线用户,热点数据...
vue+elementUI搭建动态表头的表格
前提:以下代码是vue2项目结合elementUi完成的 数据结构 后端传来的数据是两个list,一个表头的list,一个表格内容的list // 表头 headTableAtts: [{ columnLabel: 姓名, columnName: name },{ columnLabel: 年龄, columnName: age },{ colu…...
【ENSP】交换机和交换机之间实现静态路由
1.概念 三层交换机只能在Vlanif逻辑口配置iP地址 2.实现方法 交换机允许对应vlan通行,配置vlanif的ip地址,做静态路由 3.静态路由配置方法 ip route-static 目的网段 子网掩码 下一跳设备 LSW1三层交换机配置 u t m sys vlan batch 10 20 …...
2024.2.18力扣每日一题——N叉树的前序遍历
2024.2.18 题目来源我的题解方法一 深度优先遍历(递归方式)方法二 迭代方式(栈实现) 题目来源 力扣每日一题;题序:589 我的题解 方法一 深度优先遍历(递归方式) 与二叉树的前序遍…...
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是一种特殊类型的软件组件,它允许在Java虚拟机(JVM)运行时修改应用程序的字节码。这种技术通常用于性能监控、日志记录、系统调试等。Java Agent主要分为两类: 1. 启动时加载的Agent(Pre-Ma…...
深入解析大数据体系中的ETL工作原理及常见组件
** 引言 关联阅读博客文章:探讨在大数据体系中API的通信机制与工作原理 关联阅读博客文章:深入理解HDFS工作原理:大数据存储和容错性机制解析 ** 在当今数字化时代,大数据处理已经成为了企业成功的重要组成部分。而在大数据处…...
条件变量的简易C++实现版
条件变量通常与互斥锁一起使用,用于线程间的同步。以下是条件变量常用的一些函数: ①std::condition_variable::wait(lock, pred):线程调用此函数时,会原子性地释放锁并阻塞当前线程,等待另一个线程调用 notify_one 或…...
目标检测评价标准
主要借鉴:https://github.com/rafaelpadilla/Object-Detection-Metrics?tabreadme-ov-file 主要评价指标、术语: Intersection Over Union (IOU):两个检测框交集面积与并集面积的比值 True Positive (TP):IOU大于阈值的检测框…...
C51-- 蓝牙,WIFI模块
HC-08蓝牙模块: 蓝牙 -- 最好用的 串口透传 模块 透传 -- 透明传送,指的是在数据传输的过程中,通过无线的方式这组数据不发生任何形式的改变, 仿佛传输过程是透明的,同时保证传输质量,最终原封不动的传送到接收者手…...
HN热帖|替换Redis的一场赛跑
3 月 21 日, Redis Ltd. 宣布了一项重大决定:Redis “内存数据存储”项目从 Redis 7.4 版本开始将以非自由的、源代码可用的许可证发布。这一消息并不受欢迎,但也并非完全意外。这次的变化的不同寻常之处是市面上已经有了多个 Redis 替代品可…...
Kubernetes(k8s):网络插件之Calico安装与详解
Kubernetes(k8s):网络插件之Calico安装与详解 1、什么是Calico?2、安装和配置Calico(控制节点-master执行)3、配置网络策略4、 Calico 的 yaml 文件部分详解1、ConfigMap配置2、DaemonSet 配置 5、calico-k…...
Chrome base 库详解:工具类和常用类库
Chrome浏览器使用了一个强大的库名为base,它包括了许多工具类和常用类库,以支持Chrome的底层功能和性能优化。在本文中,我们将详细阐述base库中的每个子项,并提供示例代码来展示其用法。 base 库的基本结构 Chrome的base库是一个…...
Nginx开发实战三:替换请求资源中的固定数据
文章目录 1.效果预览2.下载Nginx解压并初始化3.字符串替换模块安装4.修改nginx配置文件并重启 1.效果预览 页面初始效果 页面替换后效果 说明:页面是内网的一个地址,我们通过nginx可以很便捷的将其改为外网访问,但是在外网访问这个地址后,…...
如何在Python中实现多线程和多进程?
如何在Python中实现多线程和多进程? 在Python中,多线程和多进程是实现并发编程的两种主要方式。它们各自有其特点和适用场景。下面将分别介绍如何在Python中实现多线程和多进程,并探讨它们的优缺点。 一、多线程 Python的标准库提供了thre…...
Redis面试题10道
1、什么是 Redis?简述它的优缺点? Redis 的全称是:Remote Dictionary.Server,本质上是一个 Key-Value 类型的内存数据库,很像 memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作…...
vue3从精通到入门6:v-memo指令
v-memo是一个用于优化组件渲染性能的指令。它允许你根据某个条件来缓存组件的虚拟 DOM 树,从而在条件没有变化时避免不必要的重新渲染。这对于那些接收大量 props 且渲染成本较高的组件来说非常有用。 用法 v-memo 指令接受一个表达式或一个数组作为参数࿰…...
【算法集训】基础算法:双指针
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 …...
李白打酒加强版(c++实现)
题目 话说大诗人李白,一生好饮。 幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒 2 斗。 他边走边唱: 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。 这一路上,…...
平价运动蓝牙耳机哪个品牌好?必选的5个爆款品牌,超高性价比!
蓝牙耳机,作为连接我们与音乐的桥梁,其重要性不言而喻,特别是平价运动蓝牙耳机,更是广大消费者的心头好,作为一位长期关注数码产品,特别是对蓝牙耳机有深入研究的爱好者,我深知在琳琅满目的市场…...
Android ImageView以及实现截图
实现效果 截图前 截图后 代码 package cn.jj.huaweiad;import android.annotation.SuppressLint; import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.view.ViewGro…...
剑指offer--数组中重复的数字
一.题目描述 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 算法1.排序,然后遍历,时间复杂度O(nlogn),空…...
【THM】SQL Injection(SQL注入)-初级渗透测试
简介 SQL(结构化查询语言)注入,通常称为 SQLi,是对 Web 应用程序数据库服务器的攻击,导致执行恶意查询。当 Web 应用程序使用未经正确验证的用户输入与数据库进行通信时,攻击者有可能窃取、删除或更改私人数据和客户数据,并攻击 Web 应用程序身份验证方法以获取私有数据…...
数码论坛系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)
本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…...
vue3性能提升主要通过哪几方面?
📝个人主页:爱吃炫迈 💌系列专栏:Vue 🧑💻座右铭:道阻且长,行则将至💗 文章目录 编译优化diff算法优化提取动态节点 静态提升预字符串化缓存内联事件处理函数SSR优化 源…...
跨境电商IP防关联是什么?有什么作用?
做跨境电商的朋友应该都知道IP防关联这个词,那么为何IP需要防关联呢?今天为大家来解答这个问题。 跨境电商IP防关联是指在跨境电商运营中,通过采取一系列技术手段,确保每个跨境电商账号使用独立的IP地址,以避免账号之间因为IP地址…...
git仓库太大只下载单个文件或文件夹
有没有这样的苦恼:仓库太大,只想下载其中某些文件(夹)? 一招解决: ./down_folder_from_git.sh https://github.com/facebook/infer main Makefile FILES.md scripts examples ./down_folder_from_git.sh https://github.com/Ten…...
OpenHarmony实战:RK3568 开发板镜像烧录指南
前言 烧录开发板是每个开发者的必修课,每次对系统的修改务必进行烧录测试,确保修改正确和不会引入新问题。 本文基于 Windows10,以 RK3568 开发板为例,指导如何烧录 OpenHarmony 镜像,镜像也叫固件。Hihoopÿ…...
页面布局方式/衡阳网站优化公司
cdi 2.7.5这篇文章最初出现在Thorben Janssen的Java EE博客上,每周都会发布Java新闻: Thoughts-on-java.org 。 Antonio Goncalves考察了将Java中的String串联起来的几种技术和框架的性能,并获得了意外的结果。 根据他的测试,如今…...
开平 做一网站/seo网站编辑是做什么的
课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565【项目2:穷举法解决组合问题】先阅读例题,领会穷举法(意为“穷尽式列举”,也称枚举)的思想,然后自行选题进行解决&#…...
潍坊比较大的网站制作公司/如何自创网站
获得当天的日期date %Y-%m-%d输出: 2011-07-28将当前日期赋值给DATE变量DATE$(date %Y%m%d)有时候我们需要使用今天之前或者往后的日期,这时可以使用date的 -d参数获取明天的日期date -d next-day %Y%m%d获取昨天的日期date -d last-day %Y%m%d获取上个月…...
撰写网站规划书/百度客户端电脑版下载
为了减少c文件的编译依赖,前置声明经常使用,特别是在头文件中,如果不是必要,对于class基本都使用前置声明,而不是直接#include。 今天遇到一个问题,需要在某类的头文件里面引用到另外一个“类”࿰…...
电商网站的模式/厦门站长优化工具
岗位职责1、负责公司手机平台的后台即时通讯(IM)模块的设计,开发和优化工作,并可支持百万级并发量;2、负责IM服务器架构搭建、数据库搭建、后台程序开发、与手机客户端接口的开发;3、负责研究和应用OpenFire、Tigase、Smack、Spar…...
wordpress多网站整合在一个后台/广州seo顾问
c中允许在结构体当中定义函数,它的用法和类的用法很像,不过与类有一个区别在于,struct中定义的函数和变量都是默认为public的,但class中的则是默认为private 如: #include<iostream> #include<string> s…...