我的代码中有一个奇怪的错误:
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循环中的条件仍然满足?
谢谢
答案 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++)