无法在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循环之前将intervals.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。
您要么想在减去一之前将其转换为有符号的零(就像您的工作代码所做的那样),要么更多地考虑空应该如何表现。例如:
for (std:size_t i=1; i<intervals.size(); i++) {
if (intervals[i-1].end > intervals[i].start) return false;
以上假设你知道从无符号零中减去一会得到一个很大的数字,而不是负数(你只是没有意识到你的代码是从无符号0中减去一)。但如果你认为从一个无符号的零中减去一会得到一个负的结果,现在你知道了。
相关文章:
- 为什么(-1)%vector::size()总是返回0
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- vector.size() 在比较中意外工作
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 在循环条件中调用const vector size()似乎缺少优化
- std::span.size() vs array/vector size
- 在抛出异常后,我可以信任 vector::size 吗?
- 成员功能在面向对象的框架中返回std :: vector.size()的效率
- 为什么vector.size() - 1给出垃圾值
- 为什么std :: hex导致内存腐败vector.size()
- vector.size()= 0和vector.empty()之间是否有区别
- 运行remove_if()后vector.size()的替代项
- vector.size() 返回 1,即使其中有超过 1 个元素
- vector::size() 如何在常量时间内返回向量的大小
- vector.size() 函数计算量大吗?
- 为什么 vector.size() 函数给我一个错误
- vector.size()的GDB值错误
- C++ 不合逻辑 >= 处理 vector.size() 时的比较很可能是由于size_type是无符号的
- 我可以使用 std::vector.size() 来控制删除元素的循环吗?
- std::vector::back 和 vector::operator[ vector::size() - 1] 之间