【问题标题】:Why does this use of size() in min() function in C++ give an error? [duplicate]为什么在 C++ 的 min() 函数中使用 size() 会出错? [复制]
【发布时间】:2021-01-12 11:26:19
【问题描述】:
    int var = 20;
    vector<string> A{"anything here", "random words"};
    for(int i = 0;i<A.size();i++)
        m=min(var,A[i].size());  

    // rest of the code here
    //assume proper headers were included

第 4 行给出错误:没有匹配函数调用 'min(int&,std::__cxx11::basic_string::size_type)'

【问题讨论】:

  • 关于你的标题:实际上,导致问题的不是size(),而是你将两种不同类型的参数传递给std::min()这一事实。根据其definition,只能对两个相等的参数类型正确推断。另一种选择是使min 的类型显式,例如min&lt;size_t&gt;(var, A[i].size())min&lt;int&gt;(var, A[i].size())。不过,请记住关于size_tint 的内容...
  • 考虑为这样的代码使用迭代器 for 循环。所以for (const auto&amp; s : A) m = min(var, s.size());。并且还可以考虑在代码中保留更多的空白,以使其更易于阅读。

标签: c++ size min


【解决方案1】:

您尝试比较不同的类型。大小产生size_t 类型(通常是unsigned long long)。你可以简单地改变var的类型:

string::size_type var = 20;

应该可以解决问题。

for 循环中的 i 也是如此:

for (string::size_type i = 0; i < A.size(); i++)

【讨论】:

    【解决方案2】:

    像这样更好的代码

    size_t var = 20;
    vector<string> A{"anything here", "random words"};
    for (size_t i = 0; i < A.size(); i++)
        m = min(var, A[i].size());
    

    vari 应该是 size_t 类型,因为它们正在与类型为 size_tA.size() 进行比较。想必m应该也是。

    而且,要回答这个问题,std::min(和std::max)要求两个参数的类型相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-28
      • 2017-07-08
      • 1970-01-01
      • 2020-02-05
      • 2020-09-22
      • 2021-01-20
      • 2021-09-18
      • 2017-07-13
      相关资源
      最近更新 更多