我一直在尝试创建一个函数,将数字输入一个向量(确切地说是7),并计算平均值.但是,我尝试将每个向量元素初始化为用户输入的数字.例:
double average(int a, int b, int c, int d, int e, int f, int g)
vector<double>aa;
aa[0]=int a;
aa[1]=int b;
aa[2]=int c; etc.
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我得到了
错误:'int'之前的预期primary-expression
当我改为
for(size_t j=0; j<=7; j++)
{
cout<<"Enter item # " <<(j+1);
cin>>a[j];
}
Run Code Online (Sandbox Code Playgroud)
我明白了
无效类型'int [size_t {aka unsigned int}]'对于数组下标cin >> a [j];
我是编程新手,可能不了解复杂的答案.如果以前曾问过这个问题,我会道歉.我使用Linux Ubuntu来编译我的代码(Terminal,g ++).
NB我们的讲师对此的回答是:
double average (const vector<int>& v)
{
int N = v.size();
int sum = 0;
for (int i = 0; i < N; i = i + 1)
{
sum = sum + v[i];
}
return static_cast<double>(sum)/(N);
}
Run Code Online (Sandbox Code Playgroud)
(我认为我错了,因为他要求"通过参考函数调用",我认为我创造了一个"按价值调用".我不知道他写了什么(尤其是return static_cast<double>(sum)/(N);.
你真的应该拿起你的教科书,并开始阅读,最好是昨天.不过,我将分别针对每个部分进行讨论.
你的代码(略有改动)
double average(int a, int b, int c, int d, int e, int f, int g)
{
vector<double>aa;
aa[0]=int a;
aa[1]=int b;
aa[2]=int c;
// etc.
}
Run Code Online (Sandbox Code Playgroud)
有一些问题.你收到的错误是由于所有的行看起来像aa[0]=int a;这个词int不应该在那里.如果你删除它们,它应该编译,并在运行时崩溃,因为aa仍然有大小0.您可以预分配vector(vector<double> aa(7);)或使用aa.push_back(aa);.
在你的第二次尝试
for(size_t j=0; j<=7; j++)
{
cout<<"Enter item # " <<(j+1);
cin>>a[j];
}
Run Code Online (Sandbox Code Playgroud)
对于初学者来说,第一行应该是for(size_t j=0; j<7; j++)(缺少=).a应该是vector<double>第一次尝试,而不是函数参数.
你的讲师代码就行了
double average (const vector<int>& v)
Run Code Online (Sandbox Code Playgroud)
在&之前的v告诉它不变量的接收复印件(按价值计算)的函数v,而是原件(供参考).通常,这意味着如果函数更改其值,则更改调用函数副本.然而,在这里,有一个神奇的词const不允许函数改变值.
最后,这static_cast<double>是一种将变量类型从inta 转换为a的形式double.这样做的原因是,3/2 == 1而3.0/2 == 1.5.