C ++将两个变量中较大的一个设置为新值

时间:2013-03-04 06:49:36

标签: c++ algorithm max

如果我有两个变量abstd::max(a,b)会返回更高的值。

是否有可能让这个函数修改哪个变量更大,即如果x是第三个变量,

max(a,b) = x;

这样,如果a==x大于a,那么此次通话b成立,否则为b==x

4 个答案:

答案 0 :(得分:17)

也许你想要这个:

int &max(int &a, int &b)
{
    return a > b ? a : b;
}

然后:

int main()
{
    int x = 10, y = 20;
    max(x, y) = 100;
}

max会返回对最大数字的引用,然后您可以将max函数放在作业的左侧并更改其值。

基于模板的版本:

template<typename T>
T &max(T &a, T &b)
{
  return a > b ? a : b;
}

答案 1 :(得分:1)

您可以创建此类功能:

template< typename T >
T& AssignableMax( T& a, T& b )
{
  return ( a > b ) ? a : b;
}

答案 2 :(得分:1)

如何使用引用:

int& maxref(int& a, int& b)
{
    if (a > b) {
        return a;
    }
    return b;
}

然后你可以使用:

maxref(a, b) = x;

答案 3 :(得分:0)

您可以定义一个宏,如果您可以接受(只是避免给它一个标准算法的名称,如max):

#define mmax(x, y) ((x > y) ? (x) : (y))

int main()
{
    int x = 0;
    int y = 1;
    mmax(x, y) = 2;
}

如果您不想使用宏,这里有一个通用的解决方案:

#include <iostream>
#include <type_traits>

template<typename T>
T& mmax(T& t, T& u)
{ return (t < u) ? u : t; }

int main()
{
    int x = 0;
    int y = 1;
    mmax(x, y) = 2;

    std::cout << x << y;
}