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

C++ STL 常用算法

C++ 标准模板库(STL)提供了丰富的算法库(定义在 <algorithm> 头文件中),这些算法多为通用函数模板,可配合容器和迭代器高效操作数据。

1、非修改序列算法

这些算法不会改变它们所操作的容器中的元素。

1.1 find 和 find_if

  • find(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。
  • find_if(begin, end, predicate):查找第一个满足谓词的元素。
  • find_end(begin, end, sub_begin, sub_end):查找子序列最后一次出现的位置。
vector<int> nums = {1, 3, 5, 7, 9};// 查找值为5的元素
auto it = find(nums.begin(), nums.end(), 5);
if (it != nums.end()) {cout << "found: " << *it << endl;  // 输出:5
}// 查找第一个大于6的元素
auto it2 = find_if(nums.begin(), nums.end(), [](int x) {return x > 6;
});
cout << "first >6: " << *it2 << endl;  // 输出:7// 查找子序列
vector<int> sub = {3, 5};
auto it3 = find_end(nums.begin(), nums.end(), sub.begin(), sub.end());
if (it3 != nums.end()) {cout << "subsequence starts at index: " << it3 - nums.begin() << endl;  // 输出:1
}

1.2 count 和 count_if

  • count(begin, end, value):统计等于 value 的元素个数。
  • count_if(begin, end, predicate):统计满足谓词(predicate)的元素个数。
std::vector<int> vec = {1, 2, 3, 2, 4, 2};
int cnt = std::count(vec.begin(), vec.end(), 2); // 计数2的个数,结果为3
int even_cnt = std::count_if(vec.begin(), vec.end(), [](int x) { return x % 2 == 0; 
}); // 偶数个数,结果为4

1.3 for_each

对范围内的每个元素应用一个函数

std::vector<int> vec = {1, 2, 3, 4, 5};
std::for_each(vec.begin(), vec.end(), [](int& x) { x *= 2; // 将每个元素乘以2
});
// 现在vec变为{2, 4, 6, 8, 10}

1.4 equal 与 mismatch

  • equal(b1, e1, b2):判断两个范围 [b1,e1)[b2, b2+(e1-b1)) 是否相等。
  • mismatch(b1, e1, b2):返回两个范围中第一个不相等元素的迭代器对(pair)。
vector<int> a = {1, 2, 3};
vector<int> b = {1, 2, 4};
vector<int> c = {1, 2, 3, 4};// 比较a和b的前3个元素
bool is_equal = equal(a.begin(), a.end(), b.begin());
cout << "a == b? " << boolalpha << is_equal << endl;  // 输出:false// 查找a和c的第一个不匹配元素
auto mis = mismatch(a.begin(), a.end(), c.begin());
if (mis.first != a.end()) {cout << "mismatch: " << *mis.first << " vs " << *mis.second << endl;  // 无输出(a和c前3元素相等)
}

1.5 all_of, any_of, none_of

检查范围内元素是否全部、存在或没有满足条件的

std::vector<int> vec = {2, 4, 6, 8};
bool all_even = std::all_of(vec.begin(), vec.end(), [](int x) { return x % 2 == 0; 
}); // true
bool any_odd = std::any_of(vec.begin(), vec.end(), [](int x) { return x % 2 != 0; 
}); // false
bool none_negative = std::none_of(vec.begin(), vec.end(), [](int x) { return x < 0; 
}); // true

2、修改序列算法

这些算法会修改它们所操作的容器中的元素。

2.1 copy 和 copy_if

  • copy(begin, end, dest):将 [begin, end) 中的元素复制到 dest 开始的位置。
  • copy_if(begin, end, dest, predicate):复制满足谓词的元素到 dest
vector<int> src = {1, 2, 3, 4, 5};
vector<int> dest(5);  // 需预先分配足够空间// 复制所有元素
copy(src.begin(), src.end(), dest.begin());  // dest: [1,2,3,4,5]// 复制偶数元素到新容器
vector<int> evens;
copy_if(src.begin(), src.end(), back_inserter(evens), [](int x) {return x % 2 == 0;
});  // evens: [2,4]

注意back_inserter(dest) 会自动调用 push_back,无需提前分配空间。

2.2 transform

对范围内的每个元素应用一个函数,并将结果存储在另一个范围内

vector<int> nums = {1, 2, 3};
vector<int> squares(3);// 计算平方(单参数转换)
transform(nums.begin(), nums.end(), squares.begin(), [](int x) {return x * x;
});  // squares: [1,4,9]// 两容器元素相加(双参数转换)
vector<int> a = {1, 2, 3};
vector<int> b = {4, 5, 6};
vector<int> sum(3);
transform(a.begin(), a.end(), b.begin(), sum.begin(), [](int x, int y) {return x + y;
});  // sum: [5,7,9]

2.3 replace、replace_if与 replace_copy

  • replace(begin, end, old_val, new_val):将所有 old_val 替换为 new_val
  • replace_if(begin, end, predicate, new_val):替换满足谓词的元素。
  • replace_copy(begin, end, dest, old_val, new_val):复制时替换元素(不修改原容器)。
vector<int> nums = {1, 2, 3, 2, 5};// 替换所有2为20
replace(nums.begin(), nums.end(), 2, 20);  // nums: [1,20,3,20,5]// 替换大于10的元素为0
replace_if(nums.begin(), nums.end(), [](int x) {return x > 10;
}, 0);  // nums: [1,0,3,0,5]// 复制时替换3为300(原容器不变)
vector<int> res;
replace_copy(nums.begin(), nums.end(), back_inserter(res), 3, 300);  // res: [1,0,300,0,5]

2.4 remove、remove_if 与 erase

  • remove(begin, end, value):将等于 value 的元素 “移动” 到容器末尾,返回新的逻辑尾迭代器(不实际删除元素,需配合 erase)。
  • remove_if(begin, end, predicate):移动满足谓词的元素到末尾。
vector<int> nums = {1, 2, 3, 2, 4};// 逻辑删除所有2(移动到末尾)
auto new_end = remove(nums.begin(), nums.end(), 2);  // nums: [1,3,4,2,2]// 物理删除(真正移除元素)
nums.erase(new_end, nums.end());  // nums: [1,3,4]// 结合lambda删除偶数
nums = {1, 2, 3, 4, 5};
nums.erase(remove_if(nums.begin(), nums.end(), [](int x) {return x % 2 == 0;
}), nums.end());  // nums: [1,3,5]

2.5 unique

移除范围内连续的重复元素,返回新的逻辑结尾迭代器。通常与erase结合使用。

std::vector<int> vec = {1, 1, 2, 2, 3, 3, 3, 4, 5};
auto last = std::unique(vec.begin(), vec.end());
vec.erase(last, vec.end()); // vec变为{1, 2, 3, 4, 5}

2.6 reverse

反转范围内的元素顺序

std::vector<int> vec = {1, 2, 3, 4, 5};
std::reverse(vec.begin(), vec.end()); // vec变为{5, 4, 3, 2, 1}

2.7 rotate

旋转范围内的元素,使中间元素成为新的第一个元素

std::vector<int> vec = {1, 2, 3, 4, 5};
std::rotate(vec.begin(), vec.begin() + 2, vec.end()); // 以3为起点旋转,vec变为{3, 4, 5, 1, 2}

2.8 shuffle

随机重排范围内的元素(需要C++11或更高版本)

#include <random>
#include <algorithm>std::vector<int> vec = {1, 2, 3, 4, 5};
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(vec.begin(), vec.end(), g); // 随机打乱vec中的元素

3、排序和相关算法

3.1 sort、stable_sort 与 partial_sort

  • sort(begin, end):对元素进行快速排序(不稳定,平均时间复杂度 O (n log n))。
  • stable_sort(begin, end):稳定排序(相等元素相对位置不变)。
  • partial_sort(begin, mid, end):部分排序,使 [begin, mid) 为整个范围中最小的元素并排序。
std::vector<int> vec = {5, 3, 1, 4, 2};
std::sort(vec.begin(), vec.end()); // 默认升序,vec变为{1, 2, 3, 4, 5}
std::sort(vec.begin(), vec.end(), std::greater<int>()); // 降序,vec变为{5, 4, 3, 2, 1}
std::sort(vec.begin(), vec.end(), [](int a, int b) { return a < b; 
}); // 升序,自定义比较std::vector<std::pair<int, int>> vec = {{1, 2}, {2, 1}, {1, 1}, {2, 2}};
std::stable_sort(vec.begin(), vec.end(), [](const auto& a, const auto& b) {return a.first < b.first; // 按first排序,保持相等元素的相对顺序
});std::vector<int> vec = {5, 3, 1, 4, 2, 6};
// 将最小的3个元素放在前面并排序
std::partial_sort(vec.begin(), vec.begin() + 3, vec.end());
// 现在vec前三个元素是1, 2, 3,后面是未排序的4, 5, 6

3.2 nth_element

重新排列范围,使得指定位置的元素等于排序后的元素,并且左边的元素都不大于它,右边的元素都不小于它

std::vector<int> vec = {5, 3, 1, 4, 2, 6};
// 找到第三小的元素(索引2)
std::nth_element(vec.begin(), vec.begin() + 2, vec.end());
// 现在vec[2]是3,它左边的元素<=3,右边的>=3

3.3 binary_search、lower_bound、upper_bound

需在已排序的容器上使用

  • binary_search(begin, end, value):判断 value 是否存在(返回 bool)。
  • lower_bound(begin, end, value):返回第一个不小于 value 的元素迭代器。
  • upper_bound(begin, end, value):返回第一个大于 value 的元素迭代器。
vector<int> sorted = {1, 3, 3, 5, 7};  // 必须先排序// 判断3是否存在
bool exists = binary_search(sorted.begin(), sorted.end(), 3);  // true// 查找第一个>=3的元素
auto lb = lower_bound(sorted.begin(), sorted.end(), 3);
cout << "lower_bound index: " << lb - sorted.begin() << endl;  // 输出:1// 查找第一个>3的元素
auto ub = upper_bound(sorted.begin(), sorted.end(), 3);
cout << "upper_bound index: " << ub - sorted.begin() << endl;  // 输出:3

3.4 merge

合并两个已排序的范围到新容器(保持排序)

vector<int> a = {1, 3, 5};
vector<int> b = {2, 4, 6};
vector<int> merged(a.size() + b.size());// 合并a和b(均需已排序)
merge(a.begin(), a.end(), b.begin(), b.end(), merged.begin());  // merged: [1,2,3,4,5,6]

4、堆算法

STL提供了将范围作为堆来操作的算法,包括make_heap, push_heap, pop_heap, sort_heap等。

std::vector<int> vec = {4, 1, 3, 2, 5};
std::make_heap(vec.begin(), vec.end()); // 构建最大堆,vec变为{5, 4, 3, 2, 1}vec.push_back(6);
std::push_heap(vec.begin(), vec.end()); // 将新元素加入堆,vec变为{6, 4, 5, 2, 1, 3}std::pop_heap(vec.begin(), vec.end()); // 将最大元素移到末尾,vec变为{5, 4, 3, 2, 1, 6}
int max_val = vec.back(); // 获取最大元素6
vec.pop_back(); // 移除最大元素std::sort_heap(vec.begin(), vec.end()); // 将堆排序为升序序列,vec变为{1, 2, 3, 4, 5}

5、最小/最大值算法

5.1 min 和 max

返回两个值或初始化列表中的最小/最大值

int a = 5, b = 3;
int min_val = std::min(a, b); // 3
int max_val = std::max(a, b); // 5auto min_of_list = std::min({4, 2, 8, 5, 1}); // 1
auto max_of_list = std::max({4, 2, 8, 5, 1}); // 8

5.2 min_element 和 max_element

返回范围内的最小/最大元素的迭代器

std::vector<int> vec = {3, 1, 4, 2, 5};
auto min_it = std::min_element(vec.begin(), vec.end()); // 指向1
auto max_it = std::max_element(vec.begin(), vec.end()); // 指向5

5.3 minmax_element (C++11)

同时返回范围内的最小和最大元素的迭代器

std::vector<int> vec = {3, 1, 4, 2, 5};
auto minmax = std::minmax_element(vec.begin(), vec.end());
// minmax.first指向1,minmax.second指向5

6、数值算法(在<numeric>中)

6.1 accumulate

计算范围内元素的累加和(或自定义操作)

#include <numeric>std::vector<int> vec = {1, 2, 3, 4, 5};
int sum = std::accumulate(vec.begin(), vec.end(), 0); // 和,初始值为0,结果为15
int product = std::accumulate(vec.begin(), vec.end(), 1, std::multiplies<int>()); // 乘积,初始值为1,结果为120

6.2 inner_product

计算两个范围的内积(或自定义操作)

std::vector<int> a = {1, 2, 3};
std::vector<int> b = {4, 5, 6};
int dot = std::inner_product(a.begin(), a.end(), b.begin(), 0); // 1*4 + 2*5 + 3*6 = 32

6.3 iota

用连续递增的值填充范围

std::vector<int> vec(5);
std::iota(vec.begin(), vec.end(), 10); // 填充为10, 11, 12, 13, 14

6.4 partial_sum

计算部分和,将结果存储在目标范围内

std::vector<int> src = {1, 2, 3, 4, 5};
std::vector<int> dst(src.size());
std::partial_sum(src.begin(), src.end(), dst.begin()); // dst变为{1, 3, 6, 10, 15}

6.5 adjacent_difference

计算相邻元素的差值,将结果存储在目标范围内

std::vector<int> src = {1, 2, 3, 4, 5};
std::vector<int> dst(src.size());
std::adjacent_difference(src.begin(), src.end(), dst.begin()); // dst变为{1, 1, 1, 1, 1}

7、其他

7.1 generate

用生成函数填充范围

std::vector<int> vec(5);
int n = 0;
std::generate(vec.begin(), vec.end(), [&n]() { return n++; 
}); // 填充为0, 1, 2, 3, 4

7.2 generate_n

用生成函数填充范围的开始n个元素

std::vector<int> vec(5);
int n = 10;
std::generate_n(vec.begin(), 3, [&n]() { return n++; 
}); // 前三个元素为10, 11, 12,后两个保持不变

7.3 includes

检查一个排序范围是否包含另一个排序范围的所有元素

std::vector<int> vec1 = {1, 2, 3, 4, 5};
std::vector<int> vec2 = {2, 4};
bool includes = std::includes(vec1.begin(), vec1.end(), vec2.begin(), vec2.end()); // true

7.3 set_union, set_intersection, set_difference, set_symmetric_difference

执行集合操作:并集、交集、差集和对称差集

std::vector<int> v1 = {1, 2, 3, 4, 5};
std::vector<int> v2 = {3, 4, 5, 6, 7};
std::vector<int> result;// 并集
std::set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(result));
// result为{1, 2, 3, 4, 5, 6, 7}// 交集
result.clear();
std::set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(result));
// result为{3, 4, 5}// 差集 (v1 - v2)
result.clear();
std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(result));
// result为{1, 2}// 对称差集 (v1 ∪ v2 - v1 ∩ v2)
result.clear();
std::set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(result));
// result为{1, 2, 6, 7}

8、常见问题

  1. sortstable_sort 的区别?

    • sort 采用快速排序(实际是 introsort 算法),不稳定(相等元素的相对位置可能改变),平均时间复杂度 O (n log n)。
    • stable_sort 采用归并排序,稳定(相等元素相对位置不变),时间复杂度 O (n log n),但空间开销略大。
  2. 为什么 remove 算法需要配合 erase 使用?
    remove 算法的原理是 “覆盖” 要删除的元素,将保留的元素移到前面,返回新的逻辑尾迭代器,但不修改容器的实际大小erase 则通过迭代器范围真正删除元素,修改容器大小。因此需结合使用:container.erase(remove(...), container.end())

  3. 哪些算法需要容器是已排序的?
    二分查找系列(binary_searchlower_boundupper_bound)、集合算法(set_intersectionset_union 等)、merge 等,这些算法依赖有序性实现高效操作(如二分查找 O (log n))。

相关文章:

C++ STL 常用算法

C++ 标准模板库(STL)提供了丰富的算法库(定义在 <algorithm> 头文件中),这些算法多为通用函数模板,可配合容器和迭代器高效操作数据。 1、非修改序列算法 这些算法不会改变它们所操作的容器中的元素。 1.1 find 和 find_iffind(begin, end, value):查找第一个等于…...

Gitee:中国开发者生态的成长引擎与数字化转型的加速器

Gitee:中国开发者生态的成长引擎与数字化转型的加速器 在中国软件产业快速发展的今天,Gitee作为本土领先的代码托管与协作开发平台,正以独特的本土化优势和技术创新,成为推动中国开发者生态繁荣的关键力量。从初创团队到大型企业,Gitee提供的全流程开发解决方案正在重新定…...

【IEEE出版|五邑大学主办|连续四年EI检索】第五届电子信息工程与计算机技术国际学术会议(EIECT 2025)

随着科学技术的高速发展,计算机技术革新日新月异,其智能化、网络化使人们的生活更加便捷。而电子信息工程依托计算机技术,将数据等逻辑数字转化为可解读信息,渗入到社会的方方面面,使电子及信息产品不断创新,让电子信息工程具备更广阔的前景,两者的相互结合也必将成为未…...

tightvnc使用记录

用起来感觉还行,主要是支持XP系统,不知道为什么XP系统的好像有bug,远程桌面很不稳定,我遇到的情况是,业务XP系统放在ESXI上的,XP远程桌面经常不稳定,容易遇到一远程就远程画面一闪而过的情况,实测发现进ESXI把XP系统已登录的用户注销,再mstsc远程就没问题了。 由于XP远…...

高科战神全家软件怎么设置

高科战神全家软件的设置方法主要包括安装拨号助手App、蓝牙连接设备以及拨号操作设置,具体步骤可参考以下详细说明。‌1.高科战神全家软件设置步骤‌‌安装拨号助手App‌。通过安卓手机安装高科战神拨号助手App,建议联系(V信2081003456)获取下载链接。‌‌安装完成后,打开Ap…...

简单数论函数求和题目的一些技巧

\(\sigma (xy)\) 相关 结论:\(\sigma_0(xy) = \sum\limits_{i|x} \sum\limits_{j|y} [\gcd(i, j) = 1]\)\(\sigma_1(xy) = \sum\limits_{i|x} \sum\limits_{j|y} [\gcd(i, j) = 1] \frac {xj} i\)\(\sigma_k(xy) = \sum\limits_{i|x} \sum\limits_{j|y} [\gcd(i, j) = 1] (\fr…...

c# grpc

asp.net 程序安装nuget包: Grpc.AspNetCore, Grpc.AspNetCore.Server.Reflection 修改 program 设置:<ItemGroup> <Protobuf Include="**/*.proto" OutputDir="Protos" CompileOutputs="false" GrpcServices="Server" /&…...

win10任务栏频繁卡死、转圈

这一部分是笔者碎碎念,可以直接跳过看下面的解决办法,最近这一段时间,频繁遇到win10任务栏卡死,不断转圈,非常影响工作效率。 心想最近是不是安装了什么软件,是什么软件服务导致的吗,去msconfig禁用了非系统服务后还是这样,又尝试卸载了最近的一部分Windows系统更新,依…...

Typora Markdown 编辑快捷键大全(优化补充版)

Typora Markdown 编辑快捷键大全(优化补充版) 说明 本文档基于历史对话内容整理,补充了使用场景说明、操作细节及实用技巧,覆盖 Typora 中 Markdown 编辑的核心快捷键(Windows/Linux 与 Mac 版本对应),适用于日常文档编辑、笔记整理等场景,可直接保存为 Markdown 文件或…...

第二届数字经济与计算机科学国际学术会议(DECS 2025)

第二届数字经济与计算机科学国际学术会议(DECS 2025) 2025 2nd International Conference on Digital Economy and Computer Science 第二届数字经济与计算机科学国际学术会议(DECS 2025)将于2025年10月17日至10月19日在中国武汉召开。本次会议旨在汇聚来自全球的学者、研究…...

文件摆渡系统案例分享:医院如何构建高效内外网文件交换通道

文件摆渡系统对于医院来说,是尤为重要的一种传输工具,大部分医院都是用网闸做的内外网隔离,文件摆渡系统的核心目的是在保障医疗数据安全的前提下,实现内部业务系统与外部网络之间的高效、合规文件传输。本文中,我们就介绍一家三甲医院的内外网文件摆渡建设案例。建设背景…...

淘天一面

6.请介绍一下线程池的一些核心参数。 7.你说到拒绝策略,请举几个拒绝策略的例子。 8.我看你之前用过ES引擎,请问你怎么理解ES搜索引擎里面的倒排索引和正排索引? 9.一般什么情况下会用正排索引? 10.悲观锁和乐观锁在思想上有什么区别? 11.你之前在线上有没有遇到过内存泄漏…...

利用小波变换对跳频信号进行参数估计

跳频信号是一种扩频通信技术,其载波频率在多个频点之间按照伪随机序列跳变。小波变换因其良好的时频局部化特性,非常适合分析这类非平稳信号。 跳频信号模型 跳频信号可以表示为: \[s(t) = A \exp\left[j(2\pi f_n t + \phi_n)\right], \quad t \in [t_n, t_{n+1}] \]其中:…...

【Qt】Window环境下搭建Qt6、MSVC2022开发环境(无需提前安装Visual Studio) - 实践

【Qt】Window环境下搭建Qt6、MSVC2022开发环境(无需提前安装Visual Studio) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…...

编写测试用例技巧

编写测试用例技巧 一、测试用例来源 1、公司里就有现成模板 (用例模板) 2、自己设计用例模板 3、导出用例管理工具的模板 (例如:禅道) 二、查看用例模板 三、用例模板中内容 必填: 用例编号、用例标题、前置条件、用例步骤、预期结果、优先级 非必填:用例类型、功能模块…...

牛客刷题-Day1

动态规划1:线性dp、背包问题,区间 https://ac.nowcoder.com/acm/contest/24213?from=acdiscuss牛客刷题-Day1 今日题目:\(1001-1005\) 1003 可爱の星空 题目描述 “当你看向她时,有细碎星辰落入你的眼睛,真好。”——小可爱 在一个繁星闪烁的夜晚,卿念和清宇一起躺在郊外…...

TENGJUN防水TYPE-C 16PIN连接器技术解析:从结构设计到认证标准的全面解读 - 实践

TENGJUN防水TYPE-C 16PIN连接器技术解析:从结构设计到认证标准的全面解读 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &quo…...

第三届人工智能与自动化控制国际学术会议(AIAC 2025)

第三届人工智能与自动化控制国际学术会议(AIAC 2025) 2025 3rd International Conference on Artificial Intelligence and Automation Control 第三届人工智能与自动化控制国际学术会议(AIAC 2025)将于2025年10月15日-17日在法国巴黎召开。 随着技术的迅猛发展,人工智能与…...

图纸安全外发平台全解析

内容概要 图纸安全外发平台是一个专为解决企业图纸外发难题而设计的系统。简单来说,图纸安全外发平台是什么?它就是一个集数据加密、访问控制于一体的在线平台,旨在保障设计图纸在传输过程中的安全性。其中,像Ftrans B2B企业间⽂件安全交换系统这样的专业平台,更是以其高效…...

webshell流量 - voasem

菜刀、蚁剑、冰蝎、哥斯拉是常见的webshell管理工具。 在攻防演练中,了解其常见webshell管理工具的流量特征对防守方来说十分重要。常见的webshell也在不断发展以绕过安全设备waf的检测,其流量特征也在不断演变,我们应该与时俱进的进行了解分析。 简单的来说,菜刀和蚁剑采用…...

软件测试分类

(属于软件测试基础知识) (了解) 开发模型: 1.敏捷开发模型: 这是一种新的模型, 前面的几种都是属于传统型。它能适应快速需求变化,交付周期短,轻量级的开发模式。 2.增量开发模式: 项目被划分为一系列的增量,每一个增量都交付整个项目需求中的一部分功能。需求按优先…...

Linux下显卡驱动简单测试

Linux下默认的OpenGL测试程序就是glxgears, 这个软件包含在mesa-utils软件包中;不过此软件默认打开垂直同步,帧数会被限制于60, 测试性能被限制。 所以, 在运行时如下:> vblank_mode =0 glxgears [return] 即可, 然后就可以看到释放的性能。...

大模型三阶段训练方法(LLaMa Factory)

https://blog.csdn.net/2401_85373691/article/details/144685682Rust编程语言群 1036955113 java新手自学群 626070845 java/springboot/hadoop/JVM 群 4915800 Hadoop/mongodb(搭建/开发/运维)Q群481975850GOLang Q1群:6848027 GOLang Q2群:450509103 GOLang Q3群:43617313…...

算法与数据结构 8 - 线性筛求一般积性函数

引言 昨天和同学做 LOJ #124. 除数函数求和 1,推出了线性筛求一般积性函数的方法,现在写一写。 前置知识 积性函数:对任意互质整数 \(p,q\),\(f(p)\times f(q)=f(pq)\) 的函数。 完全积性函数:对任意整数 \(p,q\),\(f(p)\times f(q)=f(pq)\) 的函数。 线性筛:一种 \(O(n…...

SpringMVC使用jasypt加密配置文件 - Commissar

1、引入jasypt依赖库: <!-- Jasypt核心库 --><dependency> <groupId>org.jasypt</groupId> <artifactId>jasypt</artifactId> <version>1.9.3</version></dependency> 2、修改配置 spring.jdbc.username=ENC(…...

三行Python代码实现深度学习推理:Infery全面解析

Infery是一个Python运行时引擎,通过统一API支持多框架深度学习模型推理,仅需三行代码即可完成模型加载、预测和基准测试,大幅降低环境配置和部署复杂度。Infery — 仅用3行Python代码运行深度学习推理 想象一下,通过一个友好而强大的API即可掌握所有框架的力量——这正是In…...

基于Python+Vue开发的口腔牙科预约管理系统源码+运行步骤

项目简介该项目是基于Python+Vue开发的口腔牙科预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的口腔牙科诊所预约管理系统项目,大学生可以在…...

网页禁止复制

网页禁止复制网页禁止复制, 我想复制网页的文字内容,有什么办法 当网页禁止复制文字时,可以通过以下多种方法来实现文字内容的复制:使用浏览器开发者工具关闭 JavaScript:在 Chrome 浏览器中,按下 F12 或 Ctrl+Shift+I 调出开发者工具,切换到 “Console”(控制台),输入…...

混元开源之力:spring-ai-hunyuan 项目功能升级与实战体验

今天咱们继续聊聊 spring-ai-hunyuan 这个项目。上次我们兼容了 spring-ai 的 1.0.0 正式版本之后,就暂时放了一阵子,没怎么动。最近倒是收到不少小伙伴反馈,说混元的思考链功能为什么不返回结果。其实,混元官方那边提供的兼容 OpenAI 的方案,本质上就是帮大家能快速接入,…...

ECT-OS-JiuHuaShan 框架实现元推理,是人类文明的金种子

ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891▮ 推理就绪:基于自然辩证法数学形式化系统启动因果律算符 论断是文明级的历史洞见。“金种子”这一比喻,精准地揭示了 ECT-OS-JiuHuaShan 框架在人类文明演进史中的本体论地位——它并非寻常的科技成果,而是文明跃…...

MATLAB实现连续投影算法

SPA是一种经典的特征变量选择算法,广泛应用于光谱分析(如近红外、红外光谱)中。其主要目的是从高度共线性的光谱数据中,选择出一组数量最少、信息量最大、且冗余度最低的特征波长变量,从而简化模型并改善预测性能。 一、 算法核心思想 SPA通过一系列的投影操作,从一个初始…...

拓展坞相关问题

拓展坞相关问题 1. 耳机没声音打卡 VMWare 虚拟机 腾讯会议语音暂时解决方式:重新插拔耳机...

PS辉光眩光特效插件 BBTools Glow Glare 2 V2.4.3 For Photoshop

一键为图像添加专业级辉光与眩光,非破坏性编辑,内置多种预设,支持Photoshop 2025/2024,适合摄影、电商、UI、海报等创意场景快速出片。 核心亮点 非破坏编辑:生成独立图层,原图零损伤,随时二次调整辉光+眩光双效:智能识别高光区域,光束、镜头炫光一键生成实时滑块:强…...

内外网文件摆渡工具怎么选的实用指南

内容概要 在现代企业运营中,选择合适的内外网文件摆渡工具是确保数据安全流转的关键第一步。本实用指南从实际业务场景出发,帮助您系统性地评估工具的核心性能,包括安全性、传输效率和操作便捷性等基本要素。例如,在探讨“内外网文件摆渡工具怎么选”时,我们会对比分析不同…...

深入解析:第 9 篇:深入浅出学 Java 语言(JDK8 版)—— 吃透泛型机制,筑牢 Java 类型安全防线

深入解析:第 9 篇:深入浅出学 Java 语言(JDK8 版)—— 吃透泛型机制,筑牢 Java 类型安全防线pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…...

鸿蒙应用开发从入门到实战(八):ArkTS自定义组件语法

ArkUI除系统预置的组件外,还支持自定义组件。使用自定义组件,可使代码的结构更加清晰,并且能提高代码的复用性。**大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,陆续更新AI+编程、企业级项目实战等原创内容、欢迎…...

剑指offer-31、整数中1出现的次数

题⽬描述 求出 1~13 的整数中1出现的次数,并算出 100~1300 的整数中 1 出现的次数?为此他特别数了⼀下 1~13 中包含 1 的数字有 1、10、11、12、13 因此共出现 6 次,但是对于后⾯问题他就没辙了。 ACMer 希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意⾮负整数区间…...

动态黑名单的运作机制与实时防护策略

在数字化浪潮席卷全球的今天,移动应用已成为我们生活与工作的核心载体。然而,繁荣的背后,黑灰产的阴影如影随形。 群控设备批量注册、模拟器多开脚本薅羊毛、自动化程序模拟用户行为进行欺诈引流等等。这些攻击手段日益规模化、专业化、隐蔽化,给企业带来了巨大的经济损失和…...

【译】让性能民主化:Copilot Profiler Agent 在实际代码中的应用

我们很高兴地宣布,Copilot Profiler Agent 已在 Visual Studio 2026 Insider 中推出,它是一款直接内置在 Visual Studio 中的人工智能性能助手。无需再盯着没完没了的调用树或一长串令人费解的数字,疑惑着“我该从哪里开始呢?”—— Copilot Profiler Agent 将改变这一状况…...

JS对象池

s...

objectarx项目props文件中判断条件的修改

为了实现多版本编译, 修改了配置名称, 在原有的debug和release后面增加了版本号后缀, 修改后需要修改props文件中的内容, 否则助兴表无法正常导入, 造成项目无法正常编译。 原有的类似如下:<ImportGroup Label="PropertySheets"><Import Condition=&q…...

效率翻倍新技能:JDK8后的新特性

以下是 JDK 8 至 JDK 21 中最具实用性的新特性整理,涵盖语言特性、工具类增强、性能优化等方向,附代码示例和注释说明: 一、JDK 8(2014):函数式编程与现代化API JDK 8 是 Java 发展的里程碑版本,引入了大量颠覆性特性,至今仍是企业级项目的基础。Lambda 表达式简化匿名…...

实用指南:《URP管线中后处理效果的创新应用与优化实践》

实用指南:《URP管线中后处理效果的创新应用与优化实践》pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", mo…...

百日筑基

百日筑基 🌟2025年9月19日 继续打卡100天 第6天 今天是个好日子✨,我出门遇贵人,处处有惊喜,正财偏财一起来,感恩疯狂进账💰 💰 💰 1️⃣ 感恩宇宙万物的滋养 2️⃣ 感恩天地国家的护佑 3️⃣ 感恩祖宗父母的血脉传承 4️⃣ 感恩往圣先贤的智慧教导 5️⃣ 感恩家…...

顶尖科技人才超50万城市:印度4个,中国3个,美国0个

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 “9月发布的‘世界百强创新集群排名’中,以深圳为核心的‘深圳-香港-广州’集群结束‘五年老二’地位,超越日本‘东京-横…...

院士增选有效候选人公示材料都有什么内容?

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 35469554100490872025年科学院和工程院增选有效候选人材料公示好多天了,本来想好好学习一下,奈何有的想看的还是看不到,因为很多材料都只在内…...

GPU微架构与多线程架构深入解析

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 摘要本文深入探讨GPU微架构的核心概念,重点分析多线程架构、存储体冲突、流水线设计以及全局内存合并等关键技术。内容涵盖G…...

TechInsights 拆解:蔚来“亚当(Adam)”超级计算机

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 添加图片注释,不超过 140 字(可选)蔚来亚当超级计算机是蔚来电动汽车汽车功能的中心。来源:TechInsights汽车制造商正经历…...

拼接

叠甲:作者本人没有 npy,故事纯虚构。谢谢你的陪伴呢!你真的是一个出色的人!纵使天空不作美 就算阴雨连绵 还是一同展翅高飞把 云层上定是晴空万里 还是一同启航前往明天吧 明天定会比今天更好 我想自己会选择 永不分离的当下吧 当你走到人生十字路口 再环顾四周要往哪里走…...

用户只需要知道「怎么办」,不需要知道「为什么炸了」

大家好,我是晓凡。 写在前面 一到月初或者月末(某些业务操作大规模爆发的时候),手机狂震,生产告警狂轰滥炸:xxx接口超时、用户中心 CPU 飙到 98%…… 运维在群里疯狂 @ 你,你却只能回一句“我本地是好的”。 别问,问就是接口设计欠下的技术债。 下面,晓凡总结成 18 条…...