排序
sort
1 2 3 4 5 6 |
std::vector<int> numbers { 22, 34, 11, 443, 1223, 3231, 97}; // 默认升序 std::sort(std::begin(numbers), std::end(numbers)); // 降序 std::sort(std::begin(numbers), std::end(numbers), std::greater<>()); |
stable_sort
- 对一段元素排序并保证维持相等元素的原始顺序
partial_sort
- 3个迭代器参数first, second,last
- 这个算法会应用到
[first,last)
这个范围,执行算法后,[first,second)
会包含降序序列中[first,last)
中最小的second-first
个元素
partial_sort_copy
- 本质上和partial_sort是相同的,除了会将排序元素复制到一个不同的元素段(另一个容器)中
nth_element
- 应用的范围由第一个和第三个参数指定
- 第二个参数是指向第n个元素的迭代器
- 如果这个范围内的元素是完全有序的,这个函数的执行会导致第n个元素被放置在适当的位置
- 这个范围内,第n个元素之前的元素都小于第n个元素,而且它后面的每个元素会比它大
合并
merge
- 合并两个序列并将结果保存到第三个序列中
inplace_merge
- 合并同一个序列中两个连续有序的元素序列
搜索
find
- 在前两个参数所定义的范围内查找第三个参数相等的第一个对象
find_if
- 在前两个参数所定义的范围内查找可以使第三个参数指定的谓词返回ture的第一个对象
find_if_not
- 在前两个参数所定义的范围内查找可以使第三个参数指定的谓词返回false的第一个对象
find_first_of
- 在第一个序列中搜索第二个序列在第一个序列中第一次出现的任何元素
adjacent_find
- 搜索序列中两个连续相等的元素
find_end
- 在第一个序列中查找最后一个和另一个元素段匹配的匹配项
- 也可以看作在第一个元素序列中查找子序列的最后一个匹配项
- 返回一个指向子序列的最后一个匹配项的第一个元素的迭代器,或是返回一个指向这个序列的接受迭代器
search
- 和find_end相似,它所查找的是第一个匹配项而不是最后一个
search_n
- 搜索给定元素的匹配项,它在序列中连续出现了给定的次数
分区
partition
- 在序列中分区元素会重新对元素进行排列,所有给定谓词返回true的元素会被放在使谓词返回false的元素的前面
partition_copy
- 和partition相同的方式对序列进行分区
- 但那些使谓词返回true的元素会被复制到一个单独的序列中,使谓词返回false的元素会被复制到第三个序列中
partition_point
- 获取分区序列中第一个分区的结束迭代器
- 前两个参数定义检查范围的正向迭代器,最后一个参数用来对序列进行分区的谓词
- 在使用这个函数之前,可以使用
is_partitioned
来判断是否已经被分区
查找
binary_search
- 二分查找算法
lower_bound
- 在前两个参数指定的范围内查找不小于第三个参数的第一个元素
upper_bound
- 在前两个参数指定的范围内查找大于第三个参数的第一个元素
equal_range
- 找出有序序列中所有和给定元素相等的元素
查属性
all_of
- 序列中的所有元素都使谓词返回true,则返回true
any_of
- 序列中的任意一个元素使谓词返回true,则返回true
none_of
- 序列中没有元素使谓词返回true,则返回true
序列比较
equal
- 两个序列长度相等,并且对应元素都相等,返回true
mismatch
- 两个序列是否匹配,如果不匹配,返回位置
lexicographical_compare
- 以字典序比较由开始迭代器和结束迭代器定义的两个序列
- 第三,第四个参数是第二个序列的开始结束迭代器
- 如果第一个序列小于第二个,返回true,否则返回false
next_permutation
- 会生成一个序列的重排列,它是所有可能的字典序中的下一个排列
prev_permutation
is_permutation
- 检查一个序列是不是另一个序列的排序
复制
copy_n
- 从源容器复制指定个数的元素到目的容器中
- 第一个参数是指向第一个源元素的输入迭代器,第二个参数是需要复制的元素的个数,第三个参数是指向目的容器的第一个位置的迭代器
copy_if
- 从源序列复制使谓词返回true的元素,相当于一个过滤器
copy_backward
- 从最后一个元素开始直到第一个元素,复制元素
reverse_copy
- 将源序列中的元素复制到目的序列中,但是目的序列中的是逆序的
unique_copy
- 会将一个序列复制到另一个序列中,同时会移除连续的重复元素
去重
unique
- 在序列中原地移除重复的元素
- 要求被处理的序列必须是正向迭代器所指定的
旋转
rotate
- 从左边选择序列的元素,选择序列
rotate_copy
- 在新序列中生成一个序列的选择副本,并保持序列不变
移动
move
- 将前两个输入迭代器指定的序列移到第三个参数定义的目的序列的开始位置,第三个参数必须是输出迭代器
remove
remove_copy
remove_copy_if
设置
fill
fill_n
for_each
- 将一个函数对象应用到序列中的每一个元素上
generate
- 保存函数为序列中每个元素所返回的值
transform
- 将函数应用到序列的元素上,并将这个函数的返回值保存到两一个序列中,它返回的迭代器指向输出序列所保存的最后一个元素的下一个位置
替换
replace
replace_if
replace_copy
随机数
生成器
std::default_random_engine
1 2 |
std::seed_seq sd_seq {2, 4, 6, 8}; std::default_random_engine rng{sd_seq}; |
离散均匀分布
uniform_int_distribution
- 默认int
- a
- 上边界
- b
- 下边界
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
std::uniform_int_distribution<> d; // max auto max = std::numeric_limits<std::uniform_int_distribution<>::result_type>::max(); // 500到max std::uniform_int_distribution<> d1{500}; std::cout << d1.a() << "-" << std::b() << std::endl; // -10到10 std::uniform_int_distribution<long> d2{-10L, 10L} std::random_device rd; std::default_random_engine rng {rd()}; for (size_t i = 0; i < 10; i++) { std::cout << d2(rng) << std::endl; } |
连续均匀分布
uniform_real_distribution
- 默认double
1 2 3 4 5 6 |
std::uniform_real_distribution> d{0.0, 19.0} std::random_device rd; std::default_random_engine rng {rd()}; for (size_t i = 0; i < 10; i++) { std::cout << d(rng) << std::endl; } |
标准均匀分布
generate_canonical
- 提供
[0,1)
范围内的浮点值
- 提供
1 2 3 4 5 6 7 |
std::vector<double> data(8); std::random_device rd; std::default_random_engine rng {rd()}; std::generate(std::begin(data), std::end(data), [&rng]{return std::generate_canonical<double,12>(rng);}) |
正态分布
normal_distribution
- 默认期望是0,方差是1.0
1 2 3 4 5 6 7 8 9 10 11 |
// mu 0 sigma 1.0 std::normal_distribution<> dist; //mu 50 sigma 10 double mu{50.0}, sigma{10.0}; std::normal_distribution<> dist1{mu, sigma}; std::random_device rd; std::default_random_engine rng {rd()}; std::cout << dist1(rng) << std::endl; |
对数分布
lognormal_distribution
离散分布
discrete_distribution
分段常数分布
piecewise_constant_distribution
分段线性分布
piecewise_linear_distribution
泊松分布
poisson_distribution
几何分布
geometric_distribution
指数分布
exponential_distribution
伽马分布
gamma_distribution
威布尔分布
weibull_distribution
二项式分布
binomial_distribution
极值分布
extreme_value_distribution
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ C++并发编程_概念了解05/07
- ♥ Boost 程序库完全开发指南:容器算法数学文件08/24
- ♥ STL_priority_queue08/26
- ♥ Effective C++_第三篇07/01
- ♥ C++20_第一篇06/30
- ♥ 51CTO:Linux C++网络编程五08/20