我宣布了一个向量并在其上循环,但我得到了一个奇怪的行为。
vector<int> neg; #size of neg vector becomes two afterwards
int k=2 #k is 2 too
for(int i=neg.size()-1;i>=neg.size()-k;--i){
--do-something-with-the-value-of-vector-elements--
}
随后会导致seg vault。
但是当我将for循环改为:
时int st=neg.size()-k;
for(int i=neg.size()-1;i>=st;--i){
--do-something-with-the-value-of-vector-elements--
}
这完全没问题。我认为这是无符号和签名元素添加的一些问题,但我不确定。我在这里遗漏了一些东西。有人可以解释一下吗?
答案 0 :(得分:0)
neg.size()
不是int而是size_t
,那是无符号的,而neg.size() - k可以溢出,所以i&lt; =将永远为真。
如果您想使用带符号的算术,请使用i>=int(neg.size())-k
,或留在未签名的域中,编写i+k>=neg.size()
,将k声明为size_t。