📜  C ++ 20中的midpoint()与示例(1)

📅  最后修改于: 2023-12-03 14:39:38.084000             🧑  作者: Mango

介绍C++20中的midpoint()函数

在C++20中,新加入了一个名为midpoint()的函数,它用于计算两个数值的中间值,返回值为中间值的类型。

用法

midpoint()函数定义在头文件<type_traits>中,其函数原型为:

template<class T>
constexpr T midpoint(T a, T b) noexcept;

该函数有两个参数,分别为a和b,表示要计算中间值的两个数。函数参数必须是相同类型,否则将导致编译错误。返回值的类型与输入参数的类型相同。

下面是一个使用midpoint()函数计算中间值的例子:

#include <iostream>
#include <type_traits> // 头文件
using namespace std;

int main() {
    auto mid = std::midpoint(1, 6); // 返回类型为int
    cout << "Midpoint of 1 and 6: " << mid << endl;
    
    auto mid2 = std::midpoint(1.0, 6.0); // 返回类型为double
    cout << "Midpoint of 1.0 and 6.0: " << mid2 << endl;
    
    return 0;
}
示例

下面是一个使用midpoint()函数的完整示例:

#include <iostream>
#include <type_traits>
#include <vector>
#include <algorithm>
using namespace std;

template <typename T>
void show_midpoint(T a, T b) {
    cout << "Midpoint of " << a << " and " << b << ": " 
         << std::midpoint(a,b) << endl; // 输出中间值
}

int main() {
    // 整型
    show_midpoint<int>(1,6); // 返回类型为int
    show_midpoint<int>(10,20); // 返回类型为int
    
    // 浮点型
    show_midpoint<double>(-3.2, 5.1); // 返回类型为double
    
    // 字符
    show_midpoint<char>('a', 'z'); // 返回类型为char
    
    // 自定义类型
    struct Point { double x, y; };
    Point a = {1.0, 2.0}, b = {5.0, 6.0};
    show_midpoint<Point>(a, b); // 返回类型为Point
    
    // 容器类型
    vector<int> v{1, 3, 5, 7, 9};
    auto mid = std::midpoint(begin(v), end(v)); // 返回类型为vector<int>::iterator
    cout << "Midpoint of vector<int>: " << *mid << endl;
    
    return 0;
}

该示例中展示了midpoint()函数的用法,可以计算各种类型的中间值,包括自定义类型和容器类型。

总结

midpoint()函数是C++20中新增的一个非常实用的函数,使得计算中间值的操作变得更加简单和方便。在实际应用中,我们可以根据需要选择适当的数据类型并使用该函数进行计算。