【问题标题】:Why does standard library min function shows error below? [duplicate]为什么标准库 ​​min 函数在下面显示错误? [复制]
【发布时间】:2021-01-20 23:59:58
【问题描述】:
class Solution {
public:
    
    int maximumProduct(vector<int>& nums) {
        
        int n = nums.size();        
        vector<long long int> left_max(n,0);
        vector<long long int> right_max(n,0);
        vector<long long int> left_min(n,0);
        vector<long long int> right_min(n,0);
        
        left_min[0]=nums[0];
        left_max[0]=nums[0];
        cout<<max(1,5); //this line is working 
        for(int i=1;i<nums.size();i++){
            left_min[i]=min(left_min[i-1],nums[i]); // why this line is throwing error
            left_max[i]=max(left_max[i-1],nums[i]);
        }

        right_min[n-1] = nums[n-1];
        right_max[n-1] = nums[n-1];
        
        for(int i=n-2;i>=0;i++){
            right_min[i]=min(nums[i],right_min[i+1]);
            right_max[i]=max(nums[i],right_max[i+1]);
        }
        
        for(int i=0;i<n;i++){
            cout<<right_min[i]<<" ";
        }
        return 1;
    }
};

上面我已经评论了两行,第一行显示错误,另一行没有?谁能解释一下?

以下错误信息:

Line 16: Char 25: error: no matching function for call to 'min'
            left_min[i]=min(left_min[i-1],nums[i]); // why this line is throwing error
                        ^~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/algorithmfwd.h:383:5: note: candidate template ignored: deduced conflicting types for parameter '_Tp' ('long long' vs. 'int')
    min(const _Tp&, const _Tp&);
    ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_algo.h:3450:5: note: candidate template ignored: could not match 'initializer_list<type-parameter-0-0>' against 'long long'
    min(initializer_list<_Tp> __l, _Compare __comp)
    ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_algo.h:3444:5: note: candidate function template not viable: requires single argument '__l', but 2 arguments were provided
    min(initializer_list<_Tp> __l)
    ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/algorithmfwd.h:388:5: note: candidate function template not viable: requires 3 arguments, but 2 were provided
    min(const _Tp&, const _Tp&, _Compare);
    ^

【问题讨论】:

  • 错误可能在未显示的代码中。请提供完整的工作代码。
  • 你遇到了什么错误?
  • 在询问有关构建错误的问题时,总是包括错误的完整和完整的复制粘贴(作为文本)。请花点时间刷新the help pages,取SOtour,阅读How to Ask,以及this question checklist
  • 在您的第二个循环中,i 仅在向量大小为 1 或以下时达到零,因为它从 n - 2 开始并越来越高,但它甚至无法达到整数过载,因为 UB由索引超出范围(很可能是段错误)导致的发生时间要早得多。

标签: c++ error-handling min


【解决方案1】:

您将intlong long int 这两种不同的类型传递给minmax。这些函数期望两个参数的类型相同。

您可以尝试将 int 参数转换为 long long int

【讨论】:

  • 或者可以简单地将四个向量声明为具有int 类型的元素,因为最小值和最大值不会超过int 范围。
  • 成功了..谢谢!!!!!!!!!!!!!!!
  • 或者给出明确的类型:std::min&lt;long long&gt;(...).
【解决方案2】:

left_minnums 的数据类型不同,这就是您收到错误的原因。尝试定义所有相同数据类型的向量。

【讨论】:

    猜你喜欢
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2015-09-13
    • 2017-06-23
    • 2021-01-12
    • 1970-01-01
    相关资源
    最近更新 更多