我已经编写了一些用于检测强连接组件的代码。它运行正常,但只有一个警告:
警告:有符号和无符号整数表达式之间的比较[-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
时效果很好。流量没有向量(或在流量下)。另外,我确实理解为什么存在分段错误。我的问题恰恰是,我如何规避它(没有任何警告)?
答案 0 :(得分:3)
由于您使用的是std :: vector,因此您可能希望使用迭代器切换原始索引。
for (auto it = sorted.rbegin(); it != sorted.rend(); ++it) {
// ...
}
这会:
答案 1 :(得分:1)
您可以控制i
的值比for循环中的索引多一个,以避免尝试使i
小于0
,这会在{{1}时导致溢出没有签名。
i