【发布时间】:2020-04-09 19:56:59
【问题描述】:
我正在做一个反转向量顺序的练习。我的程序可以运行,但我在下面执行的for 循环中收到警告:
void reverse (vector<int>& v){
for(int i=0; i<v.size()/2; ++i){
swap(v[i],v[v.size()-1-i]);
}
}
在for 循环的行中,我收到警告消息“有符号和无符号整数表达式之间的比较[-Wsign-compare]”。我正在使用 Stroustrop 的 Programming Principles and Practice Using C++,他基本上使用的是通用格式(没有 / 2)。我应该以不同的方式编写这个 for 循环吗?
【问题讨论】:
-
v.size()的结果是无符号的(size_t是无符号的)。因此i<v.size()/2是有符号与无符号的比较。由于您的i永远不会是负数,您可以将i定义为unsigned int或uint32_t或size_t。 -
因为
i永远不会是负数,所以这里没有真正的问题。您的编译器警告您,您可能不够聪明,无法理解您编写的代码,应该考虑将其更改为编译器编写者认可的内容。