#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector < long long > arr;
arr[0] = 1;
arr[1] = 2;
long long sum = 0;
int i = 2;
do
{
arr[i] = arr[i - 1] + arr[i - 2];
if (arr[i] % 2 == 0)
sum += arr[i];
++i;
} while (arr[i] < 4000000);
cout << sum << endl;
return 0;
}
只需使用矢量和长对象类型。没有任何打印和崩溃。为什么?我是否需要调整阵列大小,否则问题就是其他问题。请帮帮我。
答案 0 :(得分:1)
vector < long long > arr;
没有为您的变量分配任何空间。它只是声明了一个向量。使用arr.resize(MAX_SIZE);
,其中MAX_SIZE
是您永远不会跨越的i
的最大值,或使用arr.push_back(...)
代替arr [ ... ] = ...
答案 1 :(得分:1)
代码的工作版本:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector < long long > arr(2);
arr[0] = 1;
arr[1] = 2;
long long sum = 0;
int i = 1;
do
{
++i;
arr.push_back(arr[i - 1] + arr[i - 2]);
if (arr[i] % 2 == 0)
sum += arr[i];
} while (arr[i] < 4000000);
cout << sum << endl;
return 0;
}
答案 2 :(得分:0)
vector < long long > arr; arr [ 0 ] = 1; arr [ 1 ] = 2;
您创建一个空向量,然后尝试设置其第一个和第二个元素。一旦arr [ 0 ]
被击中,您的程序的行为就会未定义。崩溃只是一种可能的结果。您的程序可以任何。
您必须将矢量初始化为大小为2或在初始化后添加元素。
vector < long long > arr(2);
arr [ 0 ] = 1;
arr [ 1 ] = 2;
或者:
vector < long long > arr;
arr.push_back(1);
arr.push_back(2);
我建议您查看您正在阅读的书中有关std::vector
的章节。您的编译器可能还提供了一些方法来启用标准容器的运行时检查,以将可能的崩溃转换为有保证的崩溃。