【问题标题】:Why is there no error for this code为什么这段代码没有错误
【发布时间】:2018-01-18 17:22:41
【问题描述】:

根据 Stroustrup Programming.. 下面的代码应该会产生范围错误。错误在最后一行i<v.size() 而不是i<=v.size

我运行了代码,它输出了向量的内容,包括v[v.size],而不是抛出异常。我正在使用带有 mingw 的 CodeBlocks。

#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];
}

【问题讨论】:

  • “根据 Stroustrup Programming.. 下面的代码应该会产生范围错误。”能否引用原文?

标签: c++ vector mingw


【解决方案1】:

您预计会出现什么错误?这里没有编译错误,但是有运行时错误。打印读取的值时,它总是会走得太远。如果您读取 2 个值,它将打印索引 0、1 和 2。

这可以通过将i&lt;=v.size() 更改为i&lt;v.size() 来解决。

在索引 for 循环中总是遵循以下模式是很常见的;那么你就知道你永远不会错:

for (int i = 0; i < count; i++) {
    ...
}

【讨论】:

最近更新 更多