当前位置:  开发笔记 > 编程语言 > 正文

无法在C++中的for循环条件语句中使用vector.size()

如何解决《无法在C++中的for循环条件语句中使用vector.size()》经验,为你挑选了1个好方法。

我最近遇到了一个令人困惑的情况.我不知道解释.这是我的简单代码:

class Solution {
public:
    bool canAttendMeetings(vector& intervals) {
        sort(intervals.begin(), intervals.end(), compare);
        for (int i=0; i intervals[i+1].start) return false;
        }
        return true;
    }  
private:
    static bool compare(const Interval &interval1, const Interval &interval2) {
        return interval1.start < interval2.start;
    }
};

问题出在这一行:

for (int i=0; i

我得到输入的运行时错误:[].但是,我想出了修复,这很简单,但很难解释.这是修复,我只是在for循环之前将interval.size()分配给一个新变量.

class Solution {
public:
    bool canAttendMeetings(vector& intervals) {
        sort(intervals.begin(), intervals.end(), compare);
        int n = intervals.size();
        for (int i=0; i intervals[i+1].start) return false;
        }
        return true;
    }
private:
    static bool compare(const Interval &interval1, const Interval &interval2) {
        return interval1.start < interval2.start;
    }
};

任何人都可以向我解释为什么第一个版本不起作用但第二个版本有效吗?非常感谢!



1> JSF..:

问题是size()当容器为空时返回无符号0.

您要么在减去一个之前将其转换为有符号的零(正如您的工作代码所做的那样),要么更多地考虑空的行为.如:

    for (std:size_t i=1; i intervals[i].start) return false;

上面假设您知道从无符号零中减去一个给出一个非常大的数字,而不是一个负数(并且您只是没有意识到您的代码从无符号零中减去一个).但是如果你认为从无符号零中减去一个给出一个负面结果,现在你知道了.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有