vector <int> o; //Empty vector
for(int i=0;i<=o.size()-1;i++) cout<<o[i];
Run Code Online (Sandbox Code Playgroud)
在上面得到运行时错误
vector <int> o;
for(auto j : o){
cout<<j<<" ";
}
Run Code Online (Sandbox Code Playgroud)
但是,如果使用迭代器,则此代码运行良好
Bat*_*eba 14
o.size()C++ 标准要求返回unsigned类型。当它为零时,减去 1std::numeric_limits<decltype(o.size())>::max()就意味着您的循环运行超过了空向量的边界。
for(std::size_t i = 0; i < o.size(); ++i)是显而易见的解决办法。采用<=和-1似乎是不真诚做作给我。
o.size()将返回一个 0 的无符号值。从它减去 1 返回一个非常大的正数,本质上是一个无限循环。最终您的越界数组访问o[i]将导致崩溃。
你可以用
for(int i = 0; i <= int(o.size() - 1); i++)
Run Code Online (Sandbox Code Playgroud)
或者只是使用更典型的
for(int i = 0;i < o.size(); i++)
Run Code Online (Sandbox Code Playgroud)
在那里您检查“小于”,而不是“小于或等于”减去一个数字。