在替换小于第一个和最后一个元素的平均值的元素后,下面的代码不会打印更新的向量元素。
如何改进此代码,用户输入指定长度的数组,并用平均值替换小于第一个和最后一个元素的平均值的每个元素。
是否有更好的方法将向量传递给函数,或更有效的方法来管理内存?
#include <iostream>
#include <vector>
std::vector<double> getData()
{
int n;
std::vector<double> intputData;
std::cout << "Enter array length\n";
std::cin >> n;
std::cout << "Enter the numbers\n";
for(int i = 0; i < n; i++){
int tmpIn;
std::cin >> tmpIn;
intputData.push_back(tmpIn);
}
return intputData;
}
void modifyData(std::vector<double> &data_mo)
{
double f=data_mo[0];
double l=data_mo[data_mo.size() - 1];
double av = (f + l)/2;
for (auto j: data_mo)
{
if(j < av){
j = av;
}
}
}
void printData(std::vector<double> &data_pr)
{
for (auto i: data_pr)
{
std::cout << i << " ";
}
std::cout << '\n';
}
int main(){
std::vector<double> data_ma = getData();
modifyData(data_ma);
printData(data_ma);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
modifyData需要它是基于范围的for循环来通过引用修改元素,否则您的修改是针对元素的副本而不是元素本身。
改变
for (auto j: data_mo)
Run Code Online (Sandbox Code Playgroud)
到
for (auto &j: data_mo)
Run Code Online (Sandbox Code Playgroud)
此外,一个简单的改进是printData通过常量引用来获取它的参数,因为向量不会改变。
void printData(const std::vector<double> &data_pr)
Run Code Online (Sandbox Code Playgroud)