初始化向量(C++)

Ton*_*cer 0 c++ vector

我一直在尝试创建一个函数,将数字输入一个向量(确切地说是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);.

Avi*_*urg 5

你真的应该拿起你的教科书,并开始阅读,最好是昨天.不过,我将分别针对每个部分进行讨论.

你的代码(略有改动)

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 == 13.0/2 == 1.5.