【问题标题】:subtraction from size_t results in large positive number [duplicate]从 size_t 中减去会导致大的正数 [重复]
【发布时间】:2016-11-30 16:46:39
【问题描述】:

我只是遇到了一个令人讨厌的错误,我有一个循环

for (auto i = 0; i < vec.size() -1; ++i) {
  //
}

vec 是 emtpy std::vector,因此 vec.size() -1 在我的系统上计算为 2^64

上述循环的正确写法是什么?

【问题讨论】:

  • 为什么不使用基于范围的 for 循环遍历向量本身? for (const auto&amp; el : vec) { do_something(el);}
  • 我只是好奇,你为什么要遍历除最后一个之外的所有元素?
  • @Borgleader 是连接字符串时那些恼人的“删除尾随空白情况”之一
  • @user695652 哦,我明白了,这很有道理。

标签: c++ size-t


【解决方案1】:

size_t 是无符号类型,因此会出现问题,只需这样做:

for (auto i = 0U; i + 1 < vec.size(); ++i) 

添加0U 以使i 无符号(以避免警告),但在这种情况下我最好使用size_t 而不是auto

【讨论】:

    【解决方案2】:

    上述循环的正确写法是什么?

    保持循环不变,但添加一个if-条件,仅当向量不为空时才分支到循环中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 2014-11-09
      • 2018-01-20
      • 2020-04-23
      • 1970-01-01
      相关资源
      最近更新 更多