【问题标题】:Something wrong with my for loop我的 for 循环有问题
【发布时间】:2014-09-25 08:55:14
【问题描述】:

我声明了一个向量并循环它,但我得到了一个奇怪的行为。

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

这工作得很好。我认为这是无符号和有符号元素添加的一些问题,但我不确定。我在这里遗漏了一些东西。谁能解释一下?

【问题讨论】:

  • 您需要将 neg.size() 转换为 int。
  • 我知道出了什么问题;这是一个数字 for 循环!

标签: c++ stl


【解决方案1】:

neg.size() 不是 int 而是 size_t,它是无符号的,并且 neg.size()-k 会溢出,所以 i

如果你想使用有符号算术,使用i&gt;=int(neg.size())-k,或者留在无符号域,写i+k&gt;=neg.size(),将k声明为size_t。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-23
    • 2021-10-25
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多