我的for循环有问题

时间:2014-09-25 08:55:14

标签: c++ stl

我宣布了一个向量并在其上循环,但我得到了一个奇怪的行为。

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--
}

这完全没问题。我认为这是无符号和签名元素添加的一些问题,但我不确定。我在这里遗漏了一些东西。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

neg.size()不是int而是size_t,那是无符号的,而neg.size() - k可以溢出,所以i&lt; =将永远为真。

如果您想使用带符号的算术,请使用i>=int(neg.size())-k,或留在未签名的域中,编写i+k>=neg.size(),将k声明为size_t。