为什么这个for循环的条件仍然满足?

时间:2016-05-11 14:25:58

标签: c++

我的代码中有一个奇怪的错误:

vector<int> myVect;
for( int i =0; i< myVect.size() -1; i++)
{
    cout<< "how come I can reach this point?" << endl;
}

输出将是&#34;我怎么能达到这一点?&#34;

我仍然不明白。 MyVect.size()为0,因为此向量为空。为什么for循环中的条件仍然满足?

谢谢

3 个答案:

答案 0 :(得分:6)

myVect.size()返回无符号整数。由于向量是空的,它将为0.当你从它中减去1时,它会变换为std::vector::size_type(通常为std::size_t)可以容纳的最大值。

由于i为0小于您满足条件并输入for循环。

请注意,从C ++ 11开始ranged based for loops。如果要循环访问容器并使用其值,可以使用

for (const auto & e : container_name)
    // use e here in a read only manner.

如果您需要修改元素,则可以使用

for (auto & e : container_name)
    // use e here however you want.

这可以保证您循环遍历容器的所有元素,并且通常不易出错。

答案 1 :(得分:3)

veccot :: size()的返回类型是size_t,这是一种无符号类型。如果从0(无符号)中减去,则数字会被包裹在&#39;返回size_t的最大可能值。

答案 2 :(得分:1)

已经回答了你从无符号0中减去1的原因,解决问题的方法是将条件改为:

for( int i =0; i + 1 < myVect.size(); i++)