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…...
22. git show
基本概述 git show 的作用是:显示各种 Git 对象(如提交、标签、树对象、文件对象等)的详细信息 基本用法 1.基本语法 git show [选项] [对象]2.查看提交的详细信息 git show <commit-hash> # 示例 git show a1b2c3d # 显示某…...
使用blob文件流
1.后端 GetMapping(value "/static/**")public void view(HttpServletRequest request, HttpServletResponse response) {// ISO-8859-1 > UTF-8 进行编码转换String imgPath extractPathFromPattern(request);if(oConvertUtils.isEmpty(imgPath) || imgPath&q…...
操作指南:在vue-fastapi-admin上增加新的功能模块
近期在github上看到一个很不错的web框架,https://github.com/mizhexiaoxiao/vue-fastapi-admin。该项目基于 FastAPI Vue3 Naive UI 的现代化前后端分离开发平台,融合了 RBAC 权限管理、动态路由和 JWT 鉴权,可以助力中小型应用快速搭建&am…...
文字、语音、图片、视频四个模态两两之间(共16种转换方向)的生成技术及理论基础的详细说明及表格总结
以下是文字、语音、图片、视频四个模态两两之间(共16种转换方向)的生成技术及理论基础的详细说明及表格总结: 1. 技术与理论基础详解 (1) 文字与其他模态的转换 文字→文字 技术:GPT、BERT、LLaMA等语言模型。理论:T…...
FramePack:让视频生成更高效、更实用
想要掌握如何将大模型的力量发挥到极致吗?叶梓老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具(限时免费)。 1小时实战课程,您将学习到如何轻松上手并有效利用 Llama Factory 来微调您的模型,以发挥其…...
【大语言模型DeepSeek+ChatGPT+python】最新AI-Python机器学习与深度学习技术在植被参数反演中的核心技术应用
在全球气候变化与生态环境监测的重要需求下,植被参数遥感反演作为定量评估植被生理状态、结构特征及生态功能的核心技术,正面临数据复杂度提升、模型精度要求高、多源异构数据融合等挑战。人工智能(AI)技术的快速发展,…...
RSS 2025|苏黎世提出「LLM-MPC混合架构」增强自动驾驶,推理速度提升10.5倍!
论文题目:Enhancing Autonomous Driving Systems with On-Board Deployed Large Language Models 论文作者:Nicolas Baumann,Cheng Hu,Paviththiren Sivasothilingam,Haotong Qin,Lei Xie,Miche…...
Oracle expdp的 EXCLUDE 参数详解
Oracle expdp的 EXCLUDE 参数详解 EXCLUDE 是 Oracle Data Pump Export (expdp) 工具中的一个关键参数,用于指定在导出过程中要排除的对象或对象类型。 一、基本语法 expdp username/password DUMPFILEexport.dmp DIRECTORYdpump_dir EXCLUDEobject_type[:name_c…...
Git创建空分支并推送到远程仓库
new-empty-branch是新分支的名称 完全空提交(Git 2.23)【推荐】 git switch --orphan new-empty-branch git config user.email "youexample.com" git config user.name "Your Name" git commit --allow-empty -m "初始空提交…...
TDS电导率传感器详解(STM32)
目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 三、程序设计 main文件 tds.h文件 tds.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 TDS电导率传感器介绍 : TDS(Total Dissolved Solid),中文名总溶解固…...
初识Redis · C++客户端list和hash
目录 前言: list lpush lrange rpush rpush llen rpop lpop blpop hash hset hget hmget hkeys hvals hexists hdel 前言: 在上一篇文章我们介绍了string的基本使用,并且发现几乎唯一的难点就是使用迭代器方面,并且我们…...
SpringBoot和微服务学习记录Day3
Hystrix 熔断器 在分布式架构中,很多服务因为网络或自身原因不可避免发生故障,如果某个服务出现问题往往会导致一系列的服务都发生故障,导致整个微服务架构瘫痪,称为服务雪崩,Hystrix就是为了解决这个问题的 服务熔…...
12个领域近120个典型案例:2024年“数据要素X”大赛典型案例集(附下载)
2024年10月25日,2024年“数据要素”大赛全国总决赛颁奖仪式在北京举行。这次大赛是首届“数据要素x”大赛,全国共有近2万支队伍踊跃参赛,10万参赛者用数据编织梦想,最终角逐出12个赛道120个典型案例。 根据国家数据局等相关公开资…...
如何在腾讯云Ubuntu服务器上部署Node.js项目
最近弄了一个Node.js项目,包含前端用户前台,管理后台和服务端API服务三个项目,本地搭建好了,于是在腾讯云上新建了个Ubuntu 24.04服务器,想要将本地的Node.js项目部署上去,包括环境配置和数据库搭建。 本文…...
【NLP 67、知识图谱】
你像即将到来的夏季一样鲜明, 以至于我这样寡淡的生命, 竟山崩般为你着迷 —— 25.4.18 一、信息 VS 知识 二、知识图谱 1.起源 于2012年5月17日被Google正式提出,初衷是为了提高搜索引擎的能力,增强用户的搜索质量以及搜索体验 …...
Java写数据结构:栈
1.概念: 一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插…...
跨境电商行业新周期下的渠道突围策略
2024年初,跨境电商圈动荡不断,多家卖家平台股价大跌,引发行业舆论热议。而作为东南亚主战场的Shopee,仅仅几个月时间跌幅已达23%。在这一波冲击中,大多数卖家都在"止血",但有棵树却逆势而上&…...
Docker如何更换镜像源提高拉取速度
在国内,由于网络政策和限制,直接访问DockerHub速度很慢,尤其是在拉取大型镜像时。为了解决这个问题,常用的方法就是更换镜像源。本文将详细介绍如何更换Docker镜像源,并提供当前可用的镜像源。 换源方法 方法1&#x…...
平方根倒数快速算法
一、平方根倒数算法的由来 在制作3D游戏的时候,曲面是由许多平面构成的,要求出光线在物体表面反射后的效果,就需要知道平面的单位法向量,法向量的长度的平方R很容易求出,单位法向量 坐标值 / R的平方根。电脑每次都要…...
详解.vscode 下的json .vscode文件夹下各个文件的作用
1.背景 看一些开源项目的时候,总是看到vscode先有不同的json文件,再次做一下总结方便之后查看 settings.json肯定不用多说了 vscode 编辑器分为 全局用户配置 和 当前工作区配置 那么.vscode文件夹下的settings.json文件夹肯定就是当前工作区配置了 在此文件对单个的项目进行配…...
【消息队列RocketMQ】二、RocketMQ 消息发送与消费:原理与实践
一、RocketMQ 消息发送原理与模式 1.1 消息发送原理 RocketMQ 消息发送的核心流程围绕 Producer、NameServer 和 Broker 展开。Producer 启动时,会向 NameServer 请求获取 Topic 的路由信息,这些信息包括 Topic 对应的 Broker 列表以及 Broker 上的…...
WPF的发展历程
文章目录 WPF的发展历程引言起源与背景(2001-2006)从Avalon到WPF设计目标与创新理念 WPF核心技术特点与架构基础架构与渲染模型关键技术特点MVVM架构模式 WPF在现代Windows开发中的地位与前景当前市场定位与其他微软UI技术的关系未来发展前景 社区贡献与…...
新书速览|OpenCV计算机视觉开发实践:基于Qt C++
《OpenCV计算机视觉开发实践:基于Qt C》 本书内容 OpenCV是计算机视觉领域的开发者必须掌握的技术。《OpenCV计算机视觉开发实践:基于Qt C》基于 OpenCV 4.10与Qt C进行编写,全面系统地介绍OpenCV的使用及实战案例,并配套提供全书示例源码、PPT课件与作…...
本地搭建一个简易版本的 Web3 服务
一、环境搭建与工具准备 (一)安装 Node.js 和 npm Node.js 是一个基于 JavaScript 的运行时环境,npm 是其默认的包管理器。在 Web3 开发中,Node.js 和 npm 是必不可少的工具。 访问 Node.js 官网 并下载最新的 LTS 版本。 安装…...
电脑安装CentOS系统
前言 电脑是Windows10系统,安装CentOS之前要将硬盘格式化,这个操作会将Windows10系统以及电脑上所有资料抹除,操作前务必谨慎复查是否有重要资料需要备份。 准备工作 准备两个U盘,一台电脑。提前把镜像下载好。镜像在百度网盘里…...
【Linux专栏】zip 多个文件不带路径
Linux && Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 今天发现 Linux 解压缩的文件中,不光包含需要的文件,还保留了目录层级,不是想要的结果。因此,本文关于…...
邀请函 | 「软件定义汽车 同星定义软件」 TOSUN用户日2025·杭州站
参会邀请函 尊敬的客户及合作伙伴: 新能源汽车智能化浪潮席卷全球,杭州作为中国技术创新高地,正引领行业变革。为助力工程师伙伴应对行业挑战,解决工程难题,同星智能将于2025年5月9日(周五)在…...
start_response详解
start_response 是Python的WSGI(Web Server Gateway Interface)中的一个重要概念,它是一个可调用对象(通常是一个函数),在WSGI应用程序里发挥着关键作用,下面为你详细介绍。 作用 在WSGI规范里…...
记一次 .NET某旅行社酒店管理系统 卡死分析
一:背景 1. 讲故事 年初有位朋友找到我,说他们的管理系统不响应了,让我帮忙看下到底咋回事? 手上也有dump,那就来分析吧。 二:为什么没有响应 1. 线程池队列有积压吗? 朋友的系统是一个web系统&#…...
[预备知识]1. 线性代数基础
线性代数基础 线性代数是深度学习的重要基础,本章节将介绍深度学习中常用的线性代数概念和操作。 1. 标量、向量、矩阵与张量 1.1 标量(Scalar) 标量是单个数值,用 x ∈ R x \in \mathbb{R} x∈R 表示。在深度学习中常用于表…...
RESTful学习笔记(二)---简单网页前后端springboot项目搭建
新建项目: 项目结构 Pom.xml中添加依赖: 要有用于启动的父进程,有启动依赖,有lombok用于自动构建getter和setter方法等 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-…...
C++ AI模型部署优化实战:基于TensorRT的高效推理引擎开发
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
[特殊字符] Prompt如何驱动大模型对本地文件实现自主变更:Cline技术深度解析
在AI技术快速发展的今天,编程方式正在经历一场革命性的变革。从传统的"人写代码"到"AI辅助编程",再到"AI自主编程",开发效率得到了质的提升。Cline作为一款基于VSCode的AI编程助手,通过其独特的pro…...
DevOps功能详解
DevOps 详解 1. 什么是 DevOps? DevOps 是 Development(开发) 和 Operations(运维) 的组合词,代表一种通过 自动化工具、协作文化 和 流程优化 来加速软件开发与交付的 方法论。其核心目标是打破开发与运维…...
忽略 CS8616 警告在 Visual Studio 2022 中【C# 8.0 】
CS8616 警告是 C# 8.0 引入的可空引用类型(NRT)相关警告,表示"由于可空引用类型的特性,某个不可为 null 的字段可能未被初始化"。 编辑项目csproj,直接删除<Nullable>enable</Nullable> 或者修改为disable或者annota…...
[架构之美]一键服务管理大师:Ubuntu智能服务停止与清理脚本深度解析
[架构之美]一键服务管理大师:Ubuntu智能服务停止与清理脚本深度解析 服务展示: 运行脚本: 剩余服务: 一、脚本设计背景与核心价值 在Linux服务器运维中,服务管理是日常操作的重要环节。本文介绍的智能服务管理脚本&a…...
23种设计模式-结构型模式之外观模式(Java版本)
Java 外观模式(Facade Pattern)详解 🧭 什么是外观模式? 外观模式是结构型设计模式之一,为子系统中的一组接口提供一个统一的高层接口,使得子系统更易使用。 就像是酒店前台,帮你处理入住、叫…...
《数据结构之美--双向链表》
引言 之前我们学习了单链表这一数据结构,虽然单链表的功能比较多,但是也存在着一些局限性,因为在单链表中节点的指向都是单向的,因此我们想从某个节点找到它的上一个节点比较困难,来不及再迷恋单链表了,接…...
如何判断设备是否支持带电插拔——从原理到实操的全面解析
点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万阅读 1.6万收藏 一、带电插拔的核心原理 带电插拔(热插拔)的本质是通过电气隔离设计和顺序通断控制,避免电流突变对设备造成损害。 • 触点分级设计:支持热…...
Google Store 如何利用 glTF 3D 模型改变产品教育
Google 为全球广大用户提供种类繁多、持续改进的硬件产品。Google 的智能手机、智能手表、耳机、平板电脑、智能家居设备等产品均通过 Google Store(谷歌商店) 以及遍布全球的实体和数字第三方零售商销售。作为一个以在人工智能、智能家居和个人设备体验方面不断开拓创新而闻名…...
Flutter 状态管理 Riverpod
Android Studio版本 Flutter SDK 版本 将依赖项添加到您的应用 flutter pub add flutter_riverpod flutter pub add riverpod_annotation flutter pub add dev:riverpod_generator flutter pub add dev:build_runner flutter pub add dev:custom_lint flutter pub add dev:riv…...
flutter 专题 六十六 Flutter Dio包网络请求抓包解决方案
在Flutter中进行网络请求时,我们可以使用的库有3个,即Http请求库、HttpClient请求库和Dio请求库(详细介绍请参考:Flutter开发之Http网络请求),使用得最多的就是Dio请求库。因为相比Http请求库和HttpClient请…...
DSL(Domain Specific Language,领域特定语言)
DSL的定义和作用 DSL是为特定业务领域设计的专门语言,这里特指为欺诈检测场景设计的规则描述语言通过DSL,业务人员可以用接近自然语言的方式定义欺诈检测规则,而不需要编写复杂的代码DSL的具体实现:使用ANTLR4作为语法解析工具支…...
基于SpringBoot的心情疗愈平台-项目分享
基于SpringBoot的心情疗愈平台-项目分享 项目介绍项目摘要管理员功能图用户实体图心理咨询师功能图系统功能图项目预览情感树洞发布帖子讲座信息心理医生心理医生管理 最后 项目介绍 使用者:管理员、用户、心理咨询师 开发技术:MySQLJavaSpringBootVue …...
富文本图片过大问题
在做若依的项目,碰到了若依自带的公告功能的图片上传后,再显示会出现图片过大的问题。在修改若依代码无果后,退而求其次修改展示页面的代码。 问题描述: 在若依框架的打卡系统中,公告使用富文本上传图片后࿰…...
Python-Django系列—部件
部件是 Django 对 HTML 输入元素的表示。部件处理 HTML 的渲染,以及从对应于部件的 GET/POST 字典中提取数据。 内置部件生成的 HTML 使用 HTML5 语法,目标是 <!DOCTYPE html>。例如,它使用布尔属性,如 checked…...
开发者视角:轻量便捷的AI视觉训推一体机如何实现AI模型快速开发
一、行业背景 1)数据与算力基础夯实:互联网、物联网和移动互联网的普及使得视觉数据呈爆发式增长,为AI视觉训推技术提供了丰富的“燃料”。同时,GPU、TPU等计算芯片的广泛使用,以及云计算的兴起,让计算能力…...
基于Python(Django)+SQLite实现(Web)校园助手
校园助手 本校园助手采用 B/S 架构。并已将其部署到服务器上。在网址上输入 db.uplei.com 即可访问。 使用说明 可使用如下账号体验: 学生界面: 账号1:123 密码1:123 账户2:201805301348 密码2:1 # --------------…...
Django 入门指南:构建强大的 Web 应用程序
什么是 Django? Django 是一个开源的高层次 Python Web 框架,旨在快速开发安全且可维护的网站。它通过简化常见的 Web 开发任务,帮助开发者专注于开发应用的核心功能。Django 实现了“快速开发”和“尽量少的重复”的理念,提供了…...