numeric
用于数值计算的函数模板
头文件
cpp
#include <numeric>accumulate
accumulate 函数用于计算容器中所有元素的总和。它接受三个参数:容器的开始迭代器、结束迭代器和初始值。
语法:
cpp
template <InputIterator Iter, class T>
T accumulate(Iter first, Iter last, T init);示例
cpp
#include <iostream>
#include <vector>
#include <numeric>
int main()
{
std::vector<int> vec = {1, 2, 3, 4, 5};
int sum = std::accumulate(vec.begin(), vec.end(), 0);
std::cout << "sum: " << sum << std::endl;
return 0;
}输出结果
shell
sum: 15inner_product
inner_product 函数用于计算两个容器中对应元素乘积的总和。
语法:
cpp
template <InputIterator1 Iter1, InputIterator2 Iter2, class T>
T inner_product(Iter1 first1, Iter1 last1, Iter2 first2, T init);示例
cpp
#include <iostream>
#include <vector>
#include <numeric>
int main()
{
std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = {2, 3, 4};
int sum = std::inner_product(vec1.begin(), vec1.end(), vec2.begin(), 0);
std::cout << "sum: " << sum << std::endl;
return 0;
}输出结果
shell
sum: 20partial_sum
partial_sum 函数用于计算容器中元素的部分和,并将结果存储在另一个容器中。
语法:
cpp
template <InputIterator InIter, OutputIterator OutIter>
OutIter partial_sum(InIter first, InIter last, OutIter result);示例
cpp
#include <iostream>
#include <vector>
#include <numeric>
int main()
{
std::vector<int> vec1 = {1, 2, 3, 4};
std::vector<int> vec2(vec1.size());
std::partial_sum(vec1.begin(), vec1.end(), vec2.begin());
for (int val : vec2) {
std::cout << val << " ";
}
std::cout << std::endl;
return 0;
}输出结果
shell
1 3 6 10adjacent_difference
adjacent_difference 函数用于计算容器中相邻元素的差值,并将结果存储在另一个容器中。
语法:
cpp
template <InputIterator InIter, OutputIterator OutIter>
OutIter adjacent_difference(InIter first, InIter last, OutIter result);示例
cpp
#include <iostream>
#include <vector>
#include <numeric>
int main()
{
std::vector<int> vec1 = {1, 2, 3, 4};
std::vector<int> result(vec1.size() - 1);
std::adjacent_difference(vec1.begin(), vec1.end(), result.begin());
for (int val : result) {
std::cout << val << " ";
}
std::cout << std::endl;
return 0;
}输出结果
shell
1 1 1std::gcd
使用 std::gcd 计算两个整数的最大公约数:
示例
cpp
#include <iostream>
#include <vector>
#include <numeric>
int main()
{
int a = 21;
int b = 14;
int result = std::gcd(a, b);
std::cout << "result: " << result << std::endl;
return 0;
}输出结果
shell
# 需要使用c++20
$ g++ -std=c++20 demo.cpp -o demo && ./demo
result: 7std::lcm
使用 std::lcm 计算两个整数的最小公倍数
示例
cpp
#include <iostream>
#include <vector>
#include <numeric>
int main()
{
int a = 21;
int b = 14;
int result = std::lcm(a, b);
std::cout << "result: " << result << std::endl;
return 0;
}输出结果
shell
result: 42std::iota
使用 std::iota 填充范围内的序列值。
示例
cpp
#include <iostream>
#include <vector>
#include <numeric>
int main()
{
std::vector<int> vec(5);
std::iota(vec.begin(), vec.end(), 1);
for (int val : vec)
{
std::cout << val << " ";
}
std::cout << std::endl;
return 0;
}输出结果
shell
1 2 3 4 5min_element
min_element 函数用于找到容器中的最大值和最小值。
示例
cpp
#include <iostream>
#include <vector>
#include <numeric>
int main()
{
std::vector<int> vec = {1, 2, 3, 4, 5};
int min_value = *std::min_element(vec.begin(), vec.end());
std::cout << "result: " << min_value << std::endl;
return 0;
}输出结果
shell
result: 1max_element
max_element 函数用于找到容器中的最大值和最小值。
示例
cpp
#include <iostream>
#include <vector>
#include <numeric>
int main()
{
std::vector<int> vec = {1, 2, 3, 4, 5};
int max_value = *std::max_element(vec.begin(), vec.end());
std::cout << "result: " << max_value << std::endl;
return 0;
}输出结果
shell
result: 5