std::minmax()
时间: 2023-12-07 18:04:07 浏览: 32
std::minmax() 是C++标准库中的一个函数模板,用于找到一组值中的最小值和最大值。它接受两个参数,分别是要比较的值和要求的最小值和最大值的结果。
函数的声明如下:
```cpp
template< class T >
std::pair<const T&, const T&> minmax( const T& a, const T& b );
```
它返回一个 std::pair 对象,其中包含参数中的最小值和最大值。返回的 pair 中第一个元素是最小值,第二个元素是最大值。注意,返回的结果是对传入参数的引用,而不是拷贝。
下面是一个使用 std::minmax() 的示例:
```cpp
#include <iostream>
#include <algorithm>
int main() {
int a = 10;
int b = 5;
std::pair<const int&, const int&> result = std::minmax(a, b);
std::cout << "最小值: " << result.first << std::endl;
std::cout << "最大值: " << result.second << std::endl;
return 0;
}
```
输出结果为:
```
最小值: 5
最大值: 10
```
这样就可以方便地找到一组值中的最小值和最大值了。
相关问题
std::min_element 有没有获取最大值得算法
`std::min_element` 函数是用来查找容器中最小值的,它返回指向容器中最小元素的迭代器。如果要获取容器中的最大值,可以使用 `std::max_element` 函数,它返回指向容器中最大元素的迭代器。
如果同时需要获取最小值和最大值,可以使用 `std::minmax_element` 函数,它返回一个 `std::pair` 对象,其中 `first` 成员是指向最小元素的迭代器,`second` 成员是指向最大元素的迭代器。例如:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v {3, -1, 5, 2, 8, 4};
auto minmax = std::minmax_element(v.begin(), v.end());
std::cout << "Min element: " << *minmax.first << std::endl;
std::cout << "Max element: " << *minmax.second << std::endl;
return 0;
}
```
输出结果为:
```
Min element: -1
Max element: 8
```
这里使用了 `auto` 关键字推导出了 `std::pair` 类型的变量 `minmax`。通过 `minmax.first` 和 `minmax.second` 可以访问到最小元素和最大元素的迭代器。
std::accumulate
`std::accumulate` 是C++ STL 中的一个算法函数,它的作用是计算给定范围内的元素的累加和。它的函数原型如下:
```cpp
template <class InputIterator, class T>
T accumulate (InputIterator first, InputIterator last, T init);
```
其中:
- `first` 和 `last` 是输入范围的迭代器,表示要计算累加和的元素范围。
- `init` 是累加和的初始值。
`std::accumulate` 的工作方式是将累加和的初始值(即 `init`)加上范围内的每个元素,然后返回最终的累加和。
例如,以下代码演示了如何使用 `std::accumulate` 计算 `std::vector<int>` 中的元素之和:
```cpp
#include <iostream>
#include <numeric>
#include <vector>
int main() {
std::vector<int> v {1, 2, 3, 4, 5};
int sum = std::accumulate(v.begin(), v.end(), 0);
std::cout << "The sum is " << sum << std::endl;
return 0;
}
```
输出结果为:
```
The sum is 15
```
在这个例子中,`v.begin()` 和 `v.end()` 分别表示 `std::vector<int>` 的第一个和最后一个元素的迭代器。`0` 是累加和的初始值。`std::accumulate` 计算了 `1 + 2 + 3 + 4 + 5` 的结果,即 `15`,并将其存储在 `sum` 变量中。
除了计算元素的累加和,`std::accumulate` 还可以用于计算其他类型的累积操作,例如乘积、最大值、最小值等等。这可以通过提供不同的二元操作函数来实现,例如 `std::multiplies` 用于计算元素的乘积,`std::max` 和 `std::min` 分别用于计算元素的最大值和最小值。