【问题标题】:Line 5: Char 54: error: no matching function for call to 'min(int, std::__cxx11::basic_string<char>::size_type)'第 5 行:字符 54:错误:没有用于调用 'min(int, std::__cxx11::basic_string<char>::size_type)' 的匹配函数
【发布时间】:2020-03-05 20:28:48
【问题描述】:
class Solution {
public:
    string reverseStr(string s, int k) {
        for (int start = 0; start < s.size(); start += 2 * k) {
            int end = min(start + k - 1, s.size() - 1);
            while (start < end) {
                swap(s[start], s[end]);
                start++;
                end--;
            }
        }
        return s;
    }
};

第 5 行:字符 54:错误:没有匹配函数调用 'min(int, std::__cxx11::basic_string::size_type)'

【问题讨论】:

  • std::min() 的参数必须都是同一类型!因此,例如,您可以将第二个转换为:int(s.size()) - 1

标签: c++ string stl


【解决方案1】:

正如编译器试图告诉你的那样,问题在于start + k -1s.size() - 1 的类型不同。所以解决这个问题的一种方法是将startk的类型更改为std::size_t

std::string reverseStr(std::string s, std::size_t k) {
    for (std::size_t start = 0; start < s.size(); start += 2 * k) {
        std::size_t end = std::min(start + k - 1, s.size() - 1);
        while (start < end) {
            swap(s[start], s[end]);
            start++;
            end--;
        }
    }
    return s;
}

您也可以将s.size() - 1 转换为int

int end = std::min(start + k - 1, static_cast<int>(s.size() - 1));

还有第三种方法可以显式指定std::min 的模板参数,但这可能会触发编译器的有符号到无符号/无符号到有符号转换警告:

int end = std::min<int>(start + k - 1, s.size() - 1);

【讨论】:

    猜你喜欢
    • 2020-07-14
    • 2018-12-05
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    相关资源
    最近更新 更多