Недавно я столкнулся с запутанной ситуацией. Я не знаю объяснений. Вот мой простой код:Невозможно использовать vector.size() внутри оператора условия цикла в 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++) {
Я получил сообщение об ошибке во время выполнения для ввода: []. Тем не менее, я понял, исправить, и это довольно просто, но трудно объяснить. Вот исправление, я просто назначаю interval.size() новой переменной перед циклом for.
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;
}
};
Может кто-нибудь объяснить мне, почему первая версия не работает, но работает вторая версия? Большое спасибо!
Каков точный текст ошибки времени выполнения для первого сценария? – eduffy