[英]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.