当我在windows下编译时,此代码会抛出警告。任何解决方案?
#include<vector>
int main(){
std::vector<int> v;
//...
for (int i = 0; i < v.size(); ++i) { //warning on this line
//...
}
}
答案 0 :(得分:48)
将int i
的所有定义替换为size_t i
。
std::vector<T>::size()
返回未签名的size_t
类型(因为容器中包含负数的元素没有意义)。
答案 1 :(得分:7)
说std::size_t i = 0;
:
for (std::size_t i = 0; i != v.size(); ++i) { /* ... */ }
答案 2 :(得分:5)
您也可以使用迭代器来避免发生警告的可能性:
for (std::vector<int>::const_iterator i = v.begin(); i != v.end(); ++i)
{
...
}
或者如果你正在使用C ++ 11:
for (int i : v)
{
...
}