如何使用函数参数设置数组大小?

Emr*_*tlu -3 c++ vector

当我为练习编写一些代码时遇到了问题.这是关于数组大小设置.我尝试了几种不同的方法,但它们没有用.

这是我的代码:

float mean(vector<float> numbers){
     int size = numbers.size();
     float dizi[size];
     float ort,toplam = 0.0;
     for(unsigned int i=0; i<numbers.size(); i++){
         dizi[i] = numbers[i];
         toplam += dizi[i];
     }

     ort = toplam / numbers.size();

     return ort;
 }
Run Code Online (Sandbox Code Playgroud)

我收到的错误是"variable length array used""variable length arrays are a C99 feature".解决办法是什么?

use*_*301 8

如果没有具有允许可变长度数组的非标准扩展的编译器,则无法使用函数参数设置数组的大小.根据C++标准,数组长度必须是编译程序时已知的常量.考虑使用另一个std::vector.

然而...

这里似乎不需要阵列.我可以建议更多的东西,

float mean(vector<float> numbers){
     int size=numbers.size();
     float ort,toplam=0.0;
     for(unsigned int i=0;i<numbers.size();i++){
         toplam+=numbers[i];
     }
     ort=toplam/numbers.size();
     return ort;
 }
Run Code Online (Sandbox Code Playgroud)

要么

float mean(vector<float> numbers){
     float toplam=0.0;
     for(float num: numbers){
         toplam+=num;
     }
     return toplam/numbers.size();
 }
Run Code Online (Sandbox Code Playgroud)

要么

float mean(vector<float> numbers){
     return std::accumulate(numbers.begin(), numbers.end(), 0.0f)/numbers.size();
 }
Run Code Online (Sandbox Code Playgroud)

文档std::accumulate.

另外,如评论中所述,考虑传入numbers作为常量引用(float mean(const vector<float> & numbers))以消除不必要的复制而不会有意外更改的风险numbers.

  • 甚至通过const ref而不是值传递矢量. (3认同)