我写了一些练习代码时遇到了问题。这与数组大小设置有关。我尝试了几种不同的方法,但是它们没有用。
这是我的代码:
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;
}
我收到的错误是"variable length array used"
和"variable length arrays are a C99 feature"
。解决办法是什么?
答案 0 :(得分:8)
如果没有具有允许variable length arrays的非标准扩展名的编译器,则无法使用函数参数设置数组的大小。根据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;
}
或
float mean(vector<float> numbers){
float toplam=0.0;
for(float num: numbers){
toplam+=num;
}
return toplam/numbers.size();
}
或
float mean(vector<float> numbers){
return std::accumulate(numbers.begin(), numbers.end(), 0.0f)/numbers.size();
}
?
Documentation for std::accumulate
。
此外,如评论中所述,考虑将numbers
作为常量引用(float mean(const vector<float> & numbers)
)传递,以消除不必要的复制而不会意外更改numbers
。