开发者社区> 问答> 正文

c++有时候不能调用max函数

环境 vs2019community 头文件导入

#include <iostream>
#include <algorithm>
#include <stack>

int largestRectangleArea(vector<int>& heights) {
    stack<int> s;
    int max_s = 0;
    s.push(-1);
    for (int i = 0; i < heights.size(); ++i)
    {
        while (s.top() != -1 && heights[s.top()] >= heights[i]) {
            int h = heights[s.top()];
            s.pop();

                        //这里用max不报错
            max_s = max(max_s, h * (i - s.top() - 1));

        }
        s.push(i);
    }
    while (s.top() != -1) {
        int h = heights[s.top()];
        s.pop();

                //这个地方用max就报错
        max_s = max(max_s , h * (heights.size() - s.top() - 1));

    }
    return max_s;
}

vs上报错显示 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E0304 没有与参数列表匹配的 重载函数 "max" 实例 Project1 E:\source\repos\Project1\main.cpp 23

可是我明明导入了头文件啊,而且第一个max用的也没问题

展开
收起
海边一只船 2020-05-27 15:36:16 2170 0
1 条回答
写回答
取消 提交回答
  • 报错为:no matching function for call to ‘max(int&, std::vector<int>::size_type)’
    原因:h * (heights.size() - s.top() - 1) 被判断为std::vector<int>::size_type类型,不能隐式转换成int类型,而max需要两个参数都是int类型,所以报错了
    改成下面这样: 
            int tmp = h * (heights.size() - s.top() - 1);
            max_s = max(max_s , tmp);
    
    
    2020-05-27 17:52:45
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载

相关实验场景

更多