簡體   English   中英

無法在C ++中的for循環條件語句中使用vector.size()

[英]Unable to use vector.size() inside the for loop condition statement in C++

我最近遇到了一個令人困惑的情況。 我不知道解釋。 這是我的簡單代碼:

class Solution {
public:
    bool canAttendMeetings(vector<Interval>& intervals) {
        sort(intervals.begin(), intervals.end(), compare);
        for (int i=0; i<intervals.size()-1; i++) {
            if (intervals[i].end > 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<intervals.size()-1; i++) {

輸入出現運行時錯誤:[]。 但是,我找到了解決方法,它很簡單,但很難解釋。 解決方法是這里,我只是在for循環之前將interval.size()分配給新變量。

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

誰能向我解釋為什么第一個版本不起作用而第二個版本起作用? 非常感謝!

問題是當容器為空時, size()返回無符號0。

您可能想將其轉換為有符號的零,然后再減去1(如您的工作代碼所做的那樣),或者更多地考慮空應該如何表現。 如:

    for (std:size_t i=1; i<intervals.size(); i++) {
        if (intervals[i-1].end > intervals[i].start) return false;

上面的假設假設您知道從無符號零中減去1會得到很大的數字,而不是負數(並且您只是沒有意識到您的代碼是從無符號零中減去1)。 但是,如果您認為從無符號零中減去1會得到否定的結果,現在您知道了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM