根据Stroustrup Programming ..下面的代码应该产生一个范围错误。该错误位于最后一行i<v.size()
而不是i<=v.size
。
我运行了代码并输出了包含v[v.size]
的向量内容,而不是抛出异常。我正在使用CodeBlocks mingw
。
#include <iostream>
#include <string>
#include <vector>
#include <stdexcept>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
vector<int>v;
for (int x;cin>>x;) v.push_back(x);
for (int i=0;i<=v.size();i++) cout << "\nv[" << i << "]==" << v[i];
}
答案 0 :(得分:0)
您期待什么错误?这里没有编译错误,但是存在运行时错误。打印读取值时,它总是走得太远。如果您读取2个值,它将打印索引0,1和2.
可以通过将i<=v.size()
更改为i<v.size()
来解决此问题。
在索引的for循环中,总是遵循以下模式是很常见的;然后你知道你永远不会错:
for (int i = 0; i < count; i++) {
...
}