嗨,我是C 的新手,我必须填写一个代码。代码应读取与第一个输入中给出的值一样多的值,之后应计算这些值的总和的三倍。
我尝试过这样的尝试:
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
if (argc != 2) {
return 1;
}
int n = atoi(argv[1]);
vector<double> x;
for (int i = 0; i < n; i++)
cin >> x[i];
double v = 0;
for (int i = 0; i < n; i++)
v = 3 * x[i];
cout << v << endl;
return 0;
}
不幸的是,我最终陷入了细分故障...这是未完成的代码
vector <double> x; //here x has no space for elements
for (int i =0; i <n ; i++) cin >> x[i] ;
您不分配内存以存储向量中的元素,因此x[i]
已脱离界限。使用push_back()
代替。
double dummy;
for (int i =0; i <n ; i++)
{
cin >> dummy;
x.push_back(dummy);
}
vector <double> x;
for (int i =0; i <n ; i++) cin >> x[i] ;
x
这里的尺寸为零,因此您将元素放在x
的无效位置中,幸运的是导致细分故障(向量对operator[]
上的检查没有任何约束检查,因此您很幸运有错误)。
您要么使vector
足够大:
vector <double> x(n);
或让它处理动态尺寸:
vector <double> x;
for (int i =0; i <n ; i++) {
double d;
cin >> d ;
x.push_back(d);
}
,因为在vector <double> x;
中,您创建了一个具有0
大小的vector
。因此,向量x
中没有空间可以容纳元素。
要纠正您的代码执行以下任一项:
- 将
vector <double> x;
更改为vector <double> x(n);
或 - 将线路
for (int i =0; i <n ; i++) cin >> x[i] ;
更改为double temp; for (int i =0; i <n ; i++) {cin >> temp; x.push_back(dummy);}