Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 返回变量绝对值最大值的实际值_C++ - Fatal编程技术网

C++ 返回变量绝对值最大值的实际值

C++ 返回变量绝对值最大值的实际值,c++,C++,我想找到两个变量绝对值的最大值,然后返回该变量的实际值,而不是该变量的绝对值 例如: int x = 3; int y = -5; int z = max(abs(x), abs(y)) 将只将z设置为5,而我希望它返回-5。是否有C++函数来执行这个操作?< /P> int z = (max(abs(x), abs(y)) == abs(x)) ? x : y; 这就像一个if条件。相当于 int z = x; if(max(abs(x), abs(y)) != abs(z)) z

我想找到两个变量绝对值的最大值,然后返回该变量的实际值,而不是该变量的绝对值

例如:

int x = 3;
int y = -5;
int z = max(abs(x), abs(y))
将只将
z
设置为
5
,而我希望它返回
-5
。是否有C++函数来执行这个操作?< /P>
int z = (max(abs(x), abs(y)) == abs(x)) ? x : y;
这就像一个if条件。相当于

int z = x;
if(max(abs(x), abs(y)) != abs(z))
    z = y;
但要短得多

STL中没有可以直接满足您需求的功能,因此您需要创建自己的功能,而这个功能可以是一个版本


更方便的方法是
intz=(abs(y)
思考。

如果你使用C++11,在STL中你可以使用int的
向量
max\u元素
和lambda
比较

std::vector<int> values = {3, -5};
int largest_abs = *std::max_element(values.begin(), values.end(), [](const int& a, const int& b)
{
    return abs(a) < abs(b);
});
std::vector values={3,-5};
int max_abs=*std::max_元素(values.begin(),values.end(),[](常量int&a,常量int&b)
{
返回abs(a)

这将返回
值的开始和结束之间的迭代器,其绝对值最大。(这是通过比较器找到的)然后使用
*
将迭代器(由
std::max_元素返回)转换为
int
它不是常用函数,但编写自己的函数很简单

int max_abs(int x, int y)
{
    if (x == INT_MIN || y == INT_MIN)
        return INT_MIN;
    return (abs(x) > abs(y)) ? x : y;
}

写你自己的,没那么难。不太可能,因为这很具体。为什么不干脆
z=(abs(x)>abs(y))?x:y
?(请注意,这两个版本都不适用于
INT\u MIN
),不过……)我怀疑已经有了一个标准函数来实现这一点,但是什么阻止了您编写自己的呢?使用两对迭代器和
std::max_元素
实现似乎非常简单。在我看来,这个用例太模糊了,无法包含在标准库中。为什么这个被否决了?当然,这可能需要更多的文字来解释,但这并没有什么错+1@OMGtechy我没有否决,但是
max(abs(x),abs(y))==abs(x)
是一种不必要的冗长和复杂的方式来编写
abs(x)>abs(y)