C++ 与跨平台开发
1. C++ 编程技巧
1.1 使用 do-while 减少重复代码
使用 do ... while
一定程度上能减小重复代码:
cpp
#include <iostream>
int main() {
int choice;
do {
std::cout << "1. 选项1" << std::endl;
std::cout << "2. 选项2" << std::endl;
std::cout << "0. 退出" << std::endl;
std::cout << "请选择: ";
std::cin >> choice;
switch (choice) {
case 1:
// 处理选项1
break;
case 2:
// 处理选项2
break;
}
} while (choice != 0);
return 0;
}
2. Qt/QML 开发
2.1 QWidget 嵌入到 QML
在 QML 中嵌入 QWidget,实现混合开发:
参考:[转载]震惊!QWidget竟然可以嵌入到QML中,QMl窗口句柄竟然是这样获取
2.2 VS Code C++ CMake 开发
使用 VS Code 进行 C++ CMake 项目开发的最佳实践。
3. OpenGL 图形编程
OpenGL 是一个跨平台的图形 API,用于渲染 2D 和 3D 图形。
3.1 基础概念
- 顶点着色器:处理顶点数据
- 片段着色器:处理像素颜色
- VAO:顶点数组对象
- VBO:顶点缓冲对象
- EBO:元素缓冲对象
3.2 示例项目
通过实际项目学习 OpenGL 编程。
4. Windows API 开发
4.1 基础窗口创建
使用 Win32 API 创建基础窗口程序。
4.2 WebView2 集成
在 C++ 应用中集成 WebView2,实现现代化的 Web UI。
参考:Get started with WebView2 in Win32 apps
5. CMake 构建系统
5.1 基础配置
cmake
cmake_minimum_required(VERSION 3.10)
project(MyProject VERSION 1.0)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
add_executable(myapp main.cpp)
# 添加库
add_library(mylib STATIC mylib.cpp)
target_link_libraries(myapp mylib)
5.2 查找依赖
cmake
# 查找 Qt5
find_package(Qt5 COMPONENTS Core Widgets REQUIRED)
target_link_libraries(myapp Qt5::Core Qt5::Widgets)
# 查找 OpenCV
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(myapp ${OpenCV_LIBS})
5.3 跨平台配置
cmake
if(WIN32)
# Windows 特定配置
add_definitions(-D_WIN32)
elseif(UNIX)
# Linux/Mac 特定配置
add_definitions(-D_UNIX)
endif()
# 设置输出目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
6. STL 标准库
6.1 容器
vector
:动态数组list
:双向链表deque
:双端队列map
:有序映射unordered_map
:无序映射(哈希表)set
:有序集合unordered_set
:无序集合
6.2 算法
cpp
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {5, 2, 8, 1, 9};
// 排序
std::sort(vec.begin(), vec.end());
// 查找
auto it = std::find(vec.begin(), vec.end(), 8);
// 遍历
std::for_each(vec.begin(), vec.end(), [](int n) {
std::cout << n << " ";
});
return 0;
}
7. 竞赛编程
7.1 常用技巧
- 使用快速 I/O
- 预处理常用数据
- 使用位运算优化
- 掌握常见算法模板
7.2 模板代码
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
// 你的代码
return 0;
}