对比较警告

时间:2016-06-27 07:17:54

标签: c++ vector

我已经编写了一些用于检测强连接组件的代码。它运行正常,但只有一个警告:

  

警告:有符号和无符号整数表达式之间的比较[-Wsign-compare]

我理解这是针对以下臭名昭着的代码段(正如此SO answer中指出的那样):

int i;                              //instead of size_t i;
vector< int > sorted;
...

for(i=sorted.size()-1; i>=0; --i) {
    ...
}

但是我如何摆脱这个警告呢?如果我写size_t i;,那么我会得到一个分段错误(并且在线裁判超过了时间限制,代码被写入)。如果我使用int i;,那么我会得到上述警告(我感到不舒服,我的教授也是如此)。

那么,有什么解决方法吗?

修改:代码在将i声明为int时效果很好。流量没有向量(或在流量下)。另外,我确实理解为什么存在分段错误。我的问题恰恰是,我如何规避它(没有任何警告)?

2 个答案:

答案 0 :(得分:3)

由于您使用的是std :: vector,因此您可能希望使用迭代器切换原始索引。

for (auto it = sorted.rbegin(); it != sorted.rend(); ++it) {
  // ...
}

这会:

  • 向后迭代您的容器
  • 删除“符号比较” 警告
  • 使代码客观上更具可读性和更安全性

答案 1 :(得分:1)

您可以控制i的值比for循环中的索引多一个,以避免尝试使i小于0,这会在{{1}时导致溢出没有签名。

i