C++常用函数合集
万能头文件:#include<bits/stdc++.h>
1. 输入输出流(I/O)函数
1.1cin
用于从标准输入流读取数据。
1.2cout
用于向标准输出流写入数据。
// 输入输出流(I/O)函数
#include <iostream>
using namespace std;
int main() {int a;cin >> a; // 输入一个整数cout << "你输入的数字是: " << a << endl; // 输出return 0;
}
1.3 cerr (标准错误流)
cerr 用于输出错误信息,通常与错误处理或异常有关。它会将信息输出到标准错误流,并且默认情况下不进行缓冲。这意味着错误信息会立刻输出。
1.4 clog (日志流)
clog 用于输出日志信息,通常用于记录程序的运行状态、警告、调试信息等。它通常与程序的运行日志有关,默认情况下会进行缓冲,这意味着它的输出可能会稍微延迟,直到缓冲区满或程序结束时。
#include <iostream>
#include <fstream>
using namespace std;int main() {// 使用 cerr 输出错误信息cerr << "Error: Something went wrong!" << endl;// 使用 clog 输出日志信息clog << "Log: Program is starting..." << endl;// 模拟文件打开失败,使用 cerr 输出错误信息ifstream file("nonexistent_file.txt");if (!file.is_open()) {cerr << "Error: Failed to open the file!" << endl;}// 输出日志信息clog << "Log: Program completed." << endl;return 0;
}
2. 字符串处理函数
2.1 strlen
strlen 是一个标准库函数,定义在 <cstring> 头文件中,用于返回以空字符 '\0' 结束的 C 风格字符串的长度(不包括空字符)。
#include <iostream>
#include <cstring> // 包含strlen
using namespace std;int main() {const char* str = "Hello, World!";cout << "字符串长度是: " << strlen(str) << endl; // 输出 13return 0;
}
2.2 strcmp
strcmp 函数用于比较两个 C 风格字符串。它逐字符比较两个字符串的 ASCII 值,返回一个整数值:
- 如果两个字符串相等,返回 0。
- 如果第一个字符串小于第二个字符串,返回负值。
- 如果第一个字符串大于第二个字符串,返回正值。
#include <iostream>
#include <cstring> // 包含strcmp
using namespace std;int main() {const char* str1 = "Hello";const char* str2 = "World";int result = strcmp(str1, str2);if (result == 0) {cout << "字符串相等" << endl;} else if (result < 0) {cout << "str1 小于 str2" << endl;} else {cout << "str1 大于 str2" << endl;}return 0;
}
2.3 strcpy
strcpy 用于将一个字符串的内容复制到另一个字符串中。它也定义在 <cstring> 头文件中。
#include <iostream>
#include <cstring> // 包含strcpy
using namespace std;int main() {const char* src = "Hello, World!";char dest[50]; // 目标字符串数组,确保有足够空间存放源字符串strcpy(dest, src); // 复制源字符串到目标字符串cout << "目标字符串是: " << dest << endl;return 0;
}
2.4 strcat
strcat 函数用于连接两个 C 风格字符串(即将第二个字符串附加到第一个字符串的末尾)。
#include <iostream>
#include <cstring> // 包含strcat
using namespace std;int main() {char str1[50] = "Hello, ";const char* str2 = "World!";strcat(str1, str2); // 连接str2到str1cout << "连接后的字符串是: " << str1 << endl;return 0;
}
2.5 stoi、stol、stof、stod
这些函数用于将字符串转换为不同的数字类型(整数、长整型、浮点数)。它们定义在 <string> 头文件中。
stoi:将字符串转换为int类型。stol:将字符串转换为long类型。stof:将字符串转换为float类型。stod:将字符串转换为double类型。
#include <iostream>
#include <string> // 包含stoi, stol, stof, stod
using namespace std;int main() {string str_int = "123";string str_long = "9876543210";string str_float = "3.14";string str_double = "2.71828";// 将字符串转换为不同类型int num1 = stoi(str_int);long num2 = stol(str_long);float num3 = stof(str_float);double num4 = stod(str_double);cout << "字符串转换为整数: " << num1 << endl;cout << "字符串转换为长整型: " << num2 << endl;cout << "字符串转换为浮点数: " << num3 << endl;cout << "字符串转换为双精度浮点数: " << num4 << endl;return 0;
}
3. 数学函数
3.1 abs
abs 是一个标准库函数,用于返回给定整数的绝对值,即无论输入是正数、负数还是零,返回一个非负的整数
#include <iostream>
#include <cstdlib> // 包含abs
using namespace std;int main() {int num1 = -10;int num2 = 5;cout << "num1 的绝对值: " << abs(num1) << endl; // 输出 10cout << "num2 的绝对值: " << abs(num2) << endl; // 输出 5return 0;
}
3.2 sqrt
sqrt 是标准库函数,用于计算一个非负数的平方根。它定义在 <cmath> 头文件中。请注意,sqrt 不能对负数计算平方根,它会返回 NaN(不是一个数字)或导致运行时错误。
#include <iostream>
#include <cmath> // 包含sqrt
using namespace std;int main() {double num = 25.0;cout << "num 的平方根: " << sqrt(num) << endl; // 输出 5return 0;
}
3.3 pow
pow 是一个用于计算幂的函数,定义在 <cmath> 头文件中。它有两个参数:底数和指数,返回底数的指数次幂(即底数的指数次方)。
#include <iostream>
#include <cmath> // 包含pow
using namespace std;int main() {double base = 2.0;double exponent = 3.0;cout << "base 的 exponent 次幂: " << pow(base, exponent) << endl; // 输出 8.0return 0;
}
计算 x 的整数 n 次幂函数(即,x的n 次方)

3.4 sin、cos、tan
在 <cmath> 头文件中,sin、cos 和 tan 分别用于计算一个角度的正弦、余弦和正切值。注意,这些函数的参数是弧度而不是角度。
sin(x):返回角度x的正弦值。cos(x):返回角度x的余弦值。tan(x):返回角度x的正切值。
#include <iostream>
#include <cmath> // 包含 sin, cos, tan
using namespace std;int main() {double angle = M_PI / 4; // 45度,即 π/4 弧度cout << "sin(45度): " << sin(angle) << endl; // 输出 0.707107cout << "cos(45度): " << cos(angle) << endl; // 输出 0.707107cout << "tan(45度): " << tan(angle) << endl; // 输出 1return 0;
}
3.5 exp
在 <cmath> 头文件中,sin、cos 和 tan 分别用于计算一个角度的正弦、余弦和正切值。注意,这些函数的参数是弧度而不是角度。
sin(x):返回角度x的正弦值。cos(x):返回角度x的余弦值。tan(x):返回角度x的正切值。
#include <iostream>
#include <cmath> // 包含 exp
using namespace std;int main() {double exponent = 2.0;cout << "e^2: " << exp(exponent) << endl; // 输出 7.389056return 0;
}
3.6 log
log(x) 函数返回 x 的自然对数(即以 e 为底的对数),它是数学中对数的常用形式。
#include <iostream>
#include <cmath> // 包含 log
using namespace std;int main() {double value = 7.389056;cout << "log(7.389056): " << log(value) << endl; // 输出 2return 0;
}
3.7 ceil、floor
ceil(x):返回大于或等于x的最小整数(即向上取整)。floor(x):返回小于或等于x的最大整数(即向下取整)。
#include <iostream>
#include <cmath> // 包含 ceil 和 floor
using namespace std;int main() {double value1 = 4.3;double value2 = -4.3;cout << "ceil(4.3): " << ceil(value1) << endl; // 输出 5cout << "floor(4.3): " << floor(value1) << endl; // 输出 4cout << "ceil(-4.3): " << ceil(value2) << endl; // 输出 -4cout << "floor(-4.3): " << floor(value2) << endl; // 输出 -5return 0;
}
4. 时间与日期函数
4.1 time
time() 函数返回当前的时间戳,也就是从 1970 年 1 月 1 日 00:00:00 UTC 到当前时刻的秒数。返回值是一个 time_t 类型的整数。
#include <iostream>
#include <ctime> // 包含 time
using namespace std;int main() {time_t currentTime = time(0); // 获取当前时间戳cout << "当前时间戳: " << currentTime << endl;return 0;
}
4.2clock
clock() 函数返回程序执行的 CPU 时间,单位是时钟周期(通常是毫秒)。可以通过 CLOCKS_PER_SEC 来获取时钟周期每秒的数量,进而换算为秒。
#include <iostream>
#include <ctime> // 包含 clock 和 CLOCKS_PER_SEC
using namespace std;int main() {clock_t start = clock(); // 获取程序开始时的 CPU 时间// 假设程序做一些工作(比如循环)for (int i = 0; i < 1000000; ++i);clock_t end = clock(); // 获取程序结束时的 CPU 时间double timeTaken = double(end - start) / CLOCKS_PER_SEC; // 计算所用时间cout << "程序执行时间: " << timeTaken << " 秒" << endl;return 0;
}
4.3localtime
localtime() 函数将给定的时间戳(time_t 类型)转换为当地时间,并返回一个 tm 结构体。该结构体包含了如年、月、日、小时、分钟、秒等详细信息。
#include <iostream>
#include <ctime> // 包含 localtime
using namespace std;int main() {time_t currentTime = time(0); // 获取当前时间戳struct tm *localTime = localtime(¤tTime); // 将时间戳转换为当地时间cout << "当前本地时间: "<< 1900 + localTime->tm_year << "-" // 年份需要加上1900<< 1 + localTime->tm_mon << "-" // 月份从0开始计数,需要加1<< localTime->tm_mday << " "<< localTime->tm_hour << ":"<< localTime->tm_min << ":"<< localTime->tm_sec << endl;return 0;
}
4.4strftime
strftime() 函数用于格式化日期和时间。你可以指定一个格式字符串来控制输出的日期时间格式。它使用 tm 结构体中的时间数据进行格式化。
#include <iostream>
#include <ctime> // 包含 strftime
using namespace std;int main() {time_t currentTime = time(0); // 获取当前时间戳struct tm *localTime = localtime(¤tTime); // 转换为当地时间char formattedTime[100];strftime(formattedTime, sizeof(formattedTime), "%Y-%m-%d %H:%M:%S", localTime); // 格式化日期时间cout << "格式化的时间: " << formattedTime << endl;return 0;
}
5. 内存管理函数
5.1 malloc、calloc
malloc(size_t size):用于动态分配内存。它返回一个指向分配内存区域的指针。分配的内存没有初始化,因此内存的内容是未定义的。calloc(size_t num, size_t size):用于动态分配内存,并初始化为零。它实际上是分配num个元素,每个元素大小为size字节的内存。
#include <stdio.h>
#include <stdlib.h>int main() {int *arr;size_t n = 5;// 使用 malloc 分配内存arr = (int *)malloc(n * sizeof(int)); // 为 5 个 int 元素分配内存if (arr == NULL) {printf("内存分配失败!\n");return 1;}// 给 malloc 分配的内存赋值for (size_t i = 0; i < n; i++) {arr[i] = i + 1;}// 输出数组元素printf("使用 malloc 分配的内存内容:\n");for (size_t i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");// 使用 calloc 分配内存int *arr2 = (int *)calloc(n, sizeof(int)); // 为 5 个 int 元素分配内存,并初始化为零if (arr2 == NULL) {printf("内存分配失败!\n");free(arr); // 释放 malloc 分配的内存return 1;}// 输出 calloc 分配的内存内容(应该都是 0)printf("使用 calloc 分配的内存内容:\n");for (size_t i = 0; i < n; i++) {printf("%d ", arr2[i]); // 所有元素都为 0}printf("\n");// 释放动态分配的内存free(arr);free(arr2);return 0;
}
5.2 free
free(pointer):释放由malloc或calloc分配的内存。在使用完动态分配的内存后,调用free可以释放内存并避免内存泄漏。
5.3 new、delete
在 C++ 中,new 和 delete 运算符用于动态内存分配和释放,它们比 malloc 和 free 更加方便和安全。
new:分配内存并返回指向该内存的指针。如果分配失败,抛出std::bad_alloc异常(C++ 语言特性)。delete:释放由new分配的内存。使用delete[]来释放数组形式的内存。
#include <iostream>
using namespace std;int main() {size_t n = 5;// 使用 new 分配内存int* arr = new int[n]; // 为 5 个 int 元素分配内存if (arr == nullptr) {cout << "内存分配失败!" << endl;return 1;}// 给 new 分配的内存赋值for (size_t i = 0; i < n; i++) {arr[i] = i + 1;}// 输出数组元素cout << "使用 new 分配的内存内容:" << endl;for (size_t i = 0; i < n; i++) {cout << arr[i] << " ";}cout << endl;// 使用 new[] 分配内存int* arr2 = new int[n]; // 为 5 个 int 元素分配内存if (arr2 == nullptr) {cout << "内存分配失败!" << endl;delete[] arr; // 释放 arrreturn 1;}// 输出 arr2(其内容将是未定义的,除非你手动初始化它们)cout << "使用 new[] 分配的内存内容:" << endl;for (size_t i = 0; i < n; i++) {cout << arr2[i] << " "; // 输出将是未定义的值}cout << endl;// 释放动态分配的内存delete[] arr; // 释放由 new[] 分配的数组内存delete[] arr2; // 释放由 new[] 分配的数组内存return 0;
}
6. 容器和算法
6.1 vector
vector 是一个可以动态扩展的数组容器,它的底层是基于动态数组实现的。相比于普通的数组,vector 提供了更加灵活的内存管理和操作方式,自动处理元素的添加、删除和内存扩展。
主要特点:
- 动态大小:
vector可以根据需要动态地扩展或收缩,能够在运行时动态分配内存。 - 按索引访问元素:与数组一样,
vector允许通过索引来直接访问元素。 - 支持自动扩容:当
vector满了,它会自动分配更大的内存来容纳更多的元素。 - 元素连续存储:
vector内部是一个连续的内存块,元素是按顺序存储的。
常用操作:
- 添加元素:使用
push_back()可以将元素添加到vector的末尾。 - 访问元素:通过
operator[]或at()可以访问vector中的元素。 - 删除元素:使用
pop_back()删除vector的最后一个元素。
#include <iostream>
#include <vector>int main() {// 创建一个空的 vectorstd::vector<int> vec;// 向 vector 中添加元素vec.push_back(10);vec.push_back(20);vec.push_back(30);// 访问并输出 vector 中的元素std::cout << "vector 中的元素:" << std::endl;for (int i = 0; i < vec.size(); i++) {std::cout << vec[i] << " "; // 或者使用 vec.at(i)}std::cout << std::endl;// 删除最后一个元素vec.pop_back();// 输出删除后的元素std::cout << "删除最后一个元素后的 vector:" << std::endl;for (int i = 0; i < vec.size(); i++) {std::cout << vec[i] << " ";}std::cout << std::endl;return 0;
}
6.2 map
map 是一个基于键值对的关联容器,它通过键(key)来存储和访问数据。每个键都是唯一的,且 map 会自动根据键的顺序对其进行排序。底层通常采用红黑树实现,因此它提供了对键的快速查找、插入和删除操作。
主要特点:
- 键值对存储:
map中的每个元素都是一个键值对(key-value),你通过键来存储和查找值。 - 有序:
map会根据键进行排序,默认是升序排列(你也可以自定义排序规则)。 - 不允许重复键:
map中的键必须唯一。如果尝试插入相同的键,新的值将替代旧的值。
常用操作:
- 插入元素:使用
insert()或[]来插入键值对。 - 访问元素:使用
[]或at()来通过键访问对应的值。 - 删除元素:使用
erase()删除指定的键值对。
#include <iostream>
#include <map>int main() {// 创建一个空的 mapstd::map<int, std::string> m;// 向 map 中插入元素m[1] = "苹果";m[2] = "香蕉";m[3] = "橙子";// 使用 insert() 插入元素m.insert({4, "葡萄"});// 访问并输出 map 中的元素std::cout << "map 中的元素:" << std::endl;for (const auto& pair : m) {std::cout << pair.first << ": " << pair.second << std::endl;}// 删除键为 2 的元素m.erase(2);// 输出删除后的 mapstd::cout << "删除键为 2 后的 map:" << std::endl;for (const auto& pair : m) {std::cout << pair.first << ": " << pair.second << std::endl;}return 0;
}

6.3 set
set 是 C++ 标准库中的一个容器,用于存储唯一的元素,并且元素会自动按照升序排列。set 不允许有重复的元素,并且对元素的查找、插入、删除等操作的时间复杂度为对数级别(O(log n))。
#include <iostream>
#include <set>int main() {std::set<int> s;// 向 set 中插入元素s.insert(10);s.insert(20);s.insert(30);s.insert(20); // 插入重复的元素,set 会忽略它// 输出 set 中的元素std::cout << "set 中的元素:" << std::endl;for (const int& elem : s) {std::cout << elem << " ";}std::cout << std::endl;return 0;
}
6.4 sort
sort 是 C++ 标准库中的排序算法,它用于对容器中的元素进行排序。默认情况下,它是按升序排序的,但也可以自定义排序规则。
#include <iostream>
#include <vector>
#include <algorithm> // sort 函数需要包含此头文件int main() {std::vector<int> vec = {30, 10, 20, 50, 40};// 对 vector 中的元素进行升序排序std::sort(vec.begin(), vec.end());// 输出排序后的 vectorstd::cout << "排序后的元素:" << std::endl;for (const int& elem : vec) {std::cout << elem << " ";}std::cout << std::endl;return 0;
}
6.5 find
find 是 C++ 标准库中的一个算法,用于在容器中查找某个元素。它返回一个迭代器,如果元素找到,返回指向该元素的迭代器;如果未找到,返回容器的 end() 迭代器。
#include <iostream>
#include <vector>
#include <algorithm> // find 函数需要包含此头文件int main() {std::vector<int> vec = {10, 20, 30, 40, 50};// 查找元素 30auto it = std::find(vec.begin(), vec.end(), 30);if (it != vec.end()) {std::cout << "找到了元素: " << *it << std::endl;} else {std::cout << "没有找到元素!" << std::endl;}return 0;
}
6.6 reverse
reverse 是 C++ 标准库中的一个算法,用于反转容器中的元素。它会直接修改容器中的顺序,使元素的顺序从尾到头反转。
#include <iostream>
#include <vector>
#include <algorithm> // reverse 函数需要包含此头文件int main() {std::vector<int> vec = {10, 20, 30, 40, 50};// 反转 vector 中的元素std::reverse(vec.begin(), vec.end());// 输出反转后的 vectorstd::cout << "反转后的元素:" << std::endl;for (const int& elem : vec) {std::cout << elem << " ";}std::cout << std::endl;return 0;
}
7. 文件操作函数
fstream:文件输入输出流。ifstream:输入文件流。ofstream:输出文件流。
// 文件操作函数
#include <fstream>
#include <iostream>
using namespace std;
int main() {ofstream outFile("example.txt"); // 创建并打开文件outFile << "Hello, file!" << endl;outFile.close(); // 关闭文件return 0;
}
8. 智能指针(C++11及以上)
shared_ptr:共享指针,多个指针共享同一对象的所有权。unique_ptr:独占指针,一个指针拥有对象的所有权。weak_ptr:弱引用指针,不会影响对象的生命周期。
// 智能指针(C++11及以上)
#include <memory>
#include <iostream>
using namespace std;
int main() {shared_ptr<int> p1 = make_shared<int>(10); // 使用智能指针cout << *p1 << endl;return 0;
}
相关文章:
C++常用函数合集
万能头文件:#include<bits/stdc.h> 1. 输入输出流(I/O)函数 1.1cin 用于从标准输入流读取数据。 1.2cout 用于向标准输出流写入数据。 // 输入输出流(I/O)函数 #include <iostream> using namespace…...
OpenGL shader开发实战学习笔记:第十二章 深入光照
1. 深入光照 1.1. 平行光 我们在前面的章节中,已经介绍了平行光的基本原理和实现步骤 平行光的基本原理是,所有的光都从同一个方向照射到物体上,这个方向就是平行光的方向。 1.2. 点光源 点光源的基本原理是,所有的光都从一个…...
CentOS7系统安装Docker教程
一、安装前准备 1、检查系统环境:Docker 要求系统为 64 位,且内核版本 3.10 以上。通过uname -r命令查看当前系统内核版本 。比如执行uname -r后,显示3.10.0-1160.el7.x86_64 ,说明满足内核版本要求。 2、卸载旧版本(…...
获取电脑信息(登录电脑的进程、C盘文件信息、浏览器信息、IP)
电脑的进程信息 // 获取登录电脑的进程信息String os System.getProperty("os.name").toLowerCase();String command;if (os.contains("win")) {command "tasklist";} else {command "ps -ef";}try {Process process new ProcessB…...
PCB 射频天线设计和版图创建技巧
本文要点 射频天线有多种形式,从整合在芯片中的扁平天线,到直接印制在PCB上的铜质天线。 创建带有一个或多个天线的版图时,需要确保在PCB不同电路模块之间彼此隔离。 在设计一个射频天线时,应该使用CAD工具,此类…...
uniapp-商城-29-vuex 关于系统状态的管理
按照我们前面讲的,vuex,的使用方式: 步骤如下: 1 先创建store 文件夹 2 在 store 中 创建一个 index.js 3、 在 store 中,创建一个modules文件夹 4、在store中,创建一个getters.js 5、在modules文件…...
小迪安全-112-yii反序列化链,某达oa,某商场,影响分析
yii是和tp一样的框架 入口文件 web目录下 相对tp比较简单一些,对比tp找一下他的url结构 对应的位置结构 这个contorllers文件的actionindex就是触发的方法 控制器,指向的index文件,就可以去视图模块看index文件 这就是前端展示的文件 自…...
区间选点详解
步骤 operator< 的作用在 C 中, operator< 是一个运算符重载函数,它定义了如何比较两个对象的大小。在 std::sort 函数中,它会用到这个比较函数来决定排序的顺序。 在 sort 中,默认会使用 < 运算符来比较两个对象…...
如何在白平衡标定种构建不同类型的白平衡色温坐标系
目录 一、预备知识: 二、常见的白平衡色温坐标系 三、白平衡色温坐标系的理解 1)横纵坐标轴分别代表什么含义? 2)色温坐标系中原点表示什么含义? 3)某M/某H的色温坐标为什么是长成这样呢?…...
Oracle RMAN同步数据库Active database duplicate
Active database duplicate,不需要先把目标数据库进行rman备份,只要目标数据库处于归档模式下即可直接通过网络对数据库进行copy,且copy完成后自动open数据库。这对于大数据特别是T级别的数据库来说优点非常明显,复制前不需要进行…...
Spring MVC 一个简单的多文件上传
原始代码逐行解释 PostMapping("/uploads") // ① 声明处理POST请求,路径为"/uploads" ResponseBody // ② 直接返回数据到响应体,不进行视图解析 public String uploads(MultipartFile[] files, // …...
基于DeepSeek/AI的资产测绘与威胁图谱构建
引言: 在网络安全攻防实践中,资产测绘是红队作战与蓝队安全运营的第一步,其本质都是通过系统性信息采集实现攻击面管理。 当前普遍存在的痛点在于,当企业级资产规模呈指数级增长时,传统基于规则引擎的低效批量处理方式…...
构建自动翻译工作流:技术与实践
一、引言 制药行业客户迫切需要一种翻译解决方案,以解决公司内部多样化的翻译难题。他们需要的不仅是提升翻译效率和准确性的工具,更希望能够保持文档的原始格式。我们观察到客户的需求广泛,包括多语言办公文件、研究文档和药品报批文件等&a…...
【Linux】中的网络管理
目录 1.ipv4原理,网关与DNS定义 2ip图形化配置--nm 2.1图形化平台配置 2.2无图形化平台配置 3.常用的网络命令--ping,wget,curl ping wget curl 4.ip命令临时配置---ifconfig,ip a ifconfig ip address 5.ip命令永久配…...
前端面试每日三题 - Day 10
这是我为准备前端/全栈开发工程师面试整理的第十天每日三题练习,涵盖: JavaScript 中 this 的指向详解与常见陷阱Vue 生命周期钩子的执行顺序与场景实践(Vue2 vs Vue3)系统设计实战:内容推荐系统的核心架构设计 ✅ 题…...
《深度学习》课程之卷积神经网络原理与实践教学设计方案
《深度学习》课程之卷积神经网络原理与实践教学设计方案 一、教学目标设计 (一)知识目标 学生能够准确描述卷积神经网络(CNN)的基本定义,包括其核心组成部分(如卷积层、池化层、全连接层等)及…...
elasticsearch中文分词器插件下载教程
一、下载原因: 我们的业务中通常使⽤的是中⽂分词,es的中⽂分词默认会将中⽂词每个字看成⼀个词⽐如:“我想吃⾁夹馍”会被分为”我”,”想”,”吃”,”⾁” ,”夹”,”馍” 这显然是…...
门面模式与适配器模式
一、门面模式 门面模式:提供统一接口访问子系统接口 1、包含角色 外观系统对外的统一接口子系统类的集合;并不知道外观角色的存在,需要为了配合外观角色而做特殊处理或修改 2、举例 原本开关灯要分别操作各个房间的灯,现在设置总…...
QSS【QT】
文章目录 QSSid选择器 & 类型选择器伪类选择器盒子模型 QSS 设置样式的时候,是可以指定某个控件来设置的。 指定控件之后,此时的样式就会针对这个指定的控件,也会针对子控件生效 ui->pushButton_2->setStyleSheet("QPushButt…...
第十六节:高频开放题-React与Vue设计哲学差异
响应式原理(Proxy vs 虚拟DOM) 组合式API vs Hooks React 与 Vue 设计哲学差异深度解析 一、响应式原理的底层实现差异 1. Vue 的响应式模型(Proxy/数据劫持) Vue 的响应式系统通过 数据劫持 实现自动依赖追踪: • …...
css 中float属性及clear的释疑
float属性可以让元素脱离文档流,父元素中的子元素设置为float,则会导致父元素的高度塌陷。 <style type"text/css"> .father{ /*没有给父元素定义高度*/background:#ccc; border:1px dashed #999; } .box01,.box02,.box0…...
缓存 --- 内存缓存 or 分布式缓存
缓存 --- 内存缓存 or 分布式缓存 内存缓存(In-Memory Cache)分布式缓存(Distributed Cache)内存缓存 vs 分布式缓存 内存缓存和分布式缓存是两种常见的缓存策略,它们在存储位置、访问速度和适用场景上有所不同。下面分…...
2025.4.17总结
工作:今天对需求的测试设计进行了完善,然后,对测试设计进行了评审,最后提了个问题单。 反思这个过程,要说不足的地方,就是评审的时候总觉得自己吐字不清晰,表达能力早就想提升了,但…...
BH1750光照传感器---附代码
目录 BH1750简介BH1750指令集BH1750工作流程 BH1750简介 VCC-->电源正; ADDR-->地址端口; GND-->电源负; PA5-->SDA-->I2C数据线; PA3-->SCL-->I2C时钟线; DVI-->I2C端口参考电压;…...
机器学习在催化剂设计中的应用理论加实操
背景介绍 数据智能驱动,催化理性设计新纪元 催化材料设计是能源转化、化工合成及环境治理等领域的核心挑战。传统催化研究主要依赖密度泛函理论(DFT)计算与实验试错法,通过量子力学模拟揭示活性位点电子结构,结合高通量实验筛选候选…...
蔡浩宇的AIGC游戏革命:从《原神》到《Whispers》的技术跨越
目录 引言:游戏行业的AI革命前夜 一、《Whispers》的技术突破与市场挑战 1.1 多模态AI技术的集成应用 1.2 与传统游戏的差异化体验 1.3 面临的商业化难题 二、从《原神》到《Whispers》的技术演进 2.1 《原神》成功的时代因素分析 2.2 蔡浩宇的技术路线转变 …...
Docker Compose 命令实现动态构建和部署
Docker Compose 命令实现动态构建和部署 一、编写支持动态版本号的 docker-compose.yml version: 3.8services:myapp:build: context: . # Dockerfile所在目录args:APP_VERSION: ${TAG:-latest} # 从环境变量获取版本号,默认latestimage: myapp:${TAG:-latest} …...
前端vue+typeScritp+elementPlus基础页面实现:
效果: 前端代码: index.vue: <template><el-container><el-main><el-card class"search-card" shadow"never"><transition :enter-active-class"proxy?.animate.searchAnimate.enter" :le…...
leetcode第20题(有效的括号)
思路解析(使用栈): 使用一个栈来保存左括号。 每当遇到一个右括号时,检查栈顶元素是否是匹配的左括号。 如果匹配,则弹出栈顶元素; 如果不匹配或者栈为空,则说明无效; 最后如果栈…...
超简单的git学习教程
本博客仅用于记录学习和使用 前提声明全部内容全部来自下面廖雪峰网站,如果侵权联系我删除 0.前言 相信有不少人被推荐那个游戏学习git,一个不止我一个完全没学习过的进去后一脸懵,半天都通不过一关然后就放弃了,我个人觉得那个…...
