c++ - 比较警告的可能解决方法

标签 c++ vector

<分区>

我已经编写了一些代码来检测强连通分量。它运行良好,但有一个警告:

warning: comparison between signed and unsigned integer expressions [-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 时运行良好。没有 vector 超过(或低于)流量。另外,我确实理解为什么会出现段错误。我的问题恰恰是,我该如何规避它(没有任何警告)?

最佳答案

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

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

这将:

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

关于c++ - 比较警告的可能解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38047974/

相关文章:

c++ - 在任何情况下,为什么总是输出16号?

c++ - 为什么这是合法的,c++ typedef func

c++ - std::stringstream vs std::string 用于连接许多字符串

c++ - 如何在尝试为某些非类型值实例化模板子类方法时产生编译器错误?

r - 列出 R 向量中的不同值

在 map 上使用 lambda 时出现 C++11 编译错误

尝试对字符串 vector 进行排序时,C++ 程序崩溃

Python:将向量插入矩阵

c++在 vector 末尾插入元素

c++ - 动态创建新对象的最佳方法