如果内部错误

时间:2014-12-11 17:08:57

标签: c++

int main()
{
    vector<int>numbers;
    int numb = 0;
    int i = 0;
    int j = i - 1;

    while (cin >> numb)
    {
        if (numb == numbers[j]) HERE IS THE PROBLEM!* 
        {
            cout << "Numbers repeated\n";
        }


    numbers.push_back(numb);

    cout << "numbers[" << i << "] = " << numbers[i] << endl;


    ++i;

}

/ ***我不明白为什么会出现异常,运行时错误,中断或其他任何名称....................... ..............................

2 个答案:

答案 0 :(得分:4)

在循环的第一次迭代中,j为-1。访问numbers[-1]是未定义的行为,因为索引超出了向量的范围。

实际上,访问任何索引都是超出范围的,直到你在向量中添加某些东西,所以你不能将numbers 全部编入索引,直到你在其上调用push_back为止至少一次。

如果用户输入了向量中已有的数字,此代码将显示该消息:

while (cin >> numb) {
    vector<int>::iterator found = std::find(numbers.begin(), numbers.end(), numb);

    if (found == numbers.end()) {
        cout << "Numbers repeated" << endl;
    }

    // If you don't want duplicate numbers in the vector, move this statement
    // into an "else" block on the last "if" block.
    numbers.push_back(numb);
}

另一方面,此代码仅在数字与输入的最后一个数字相同时显示消息,即序列号是否相同:

while (cin >> numb) {
    if (!numbers.empty() && numb == numbers.back()) {
        cout << "Numbers repeated" << endl;
    }

    numbers.push_back(numb);
}

答案 1 :(得分:0)

您需要使用初始数据初始化数字向量,或检查以确保j符合向量大小。向量本质上是一个数组,和任何数组一样,你不能超出范围。

if (j < numbers.size() && numb == numbers[j]) HERE IS THE PROBLEM!* 
{
    cout << "Numbers repeated\n";
}