Fibonacci序列与向量

时间:2016-10-30 16:13:43

标签: c++ stdvector fibonacci

我目前正试图解决Euler-Projects的一些问题,但我目前仍然遇到了第二个问题。这就是我现在所拥有的:

void p002()
{
    unsigned int result = 0;    
    std::vector<int> fibonacci{ 1,2 };

    for (int i = 2; fibonacci.at(i) < 4000000; i++)
    {
        fibonacci.at(i) = fibonacci.at(i - 1) + fibonacci.at(i - 2); //<- Doesn't work
        if (fibonacci.at(i) % 2 == 0)
            result += fibonacci.at(i);
    }

    std::cout << result;
}

有人可以帮助我并告诉我为什么这一行似乎不起作用? (在尝试执行代码时,我得到&#34; abort()调用&#34;错误。)

如果有人想知道:任务是得到斐波那契序列的所有整数的总和,其值低于4,000,000,这是偶数值。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您尝试访问超出范围的索引处的元素,则

vector::at会引发异常。您的向量包含2个元素(索引0和1)。因此fibonacci.at(2)超出范围,并抛出异常。您没有捕获异常,因此调用了std::terminate。默认情况下,std::terminate指向abort,终止您的流程。

解决方案:在向量中添加足够的元素,以使fibonacci.at(i)不超出范围。