c++ - 更新的矢量元素不打印
问题描述
下面的代码在替换小于第一个和最后一个元素的平均值的元素后不打印更新的向量元素。
如何改进此代码,用户输入指定长度的数组并将每个小于第一个和最后一个元素的平均值的元素替换为平均值。
有没有更好的方法将向量传递给函数,或更有效的方法来管理内存?
#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;
}
解决方案
modifyData
需要它是基于范围的for
循环来通过引用修改元素,否则您的修改正在处理元素的副本而不是元素本身。
改变
for (auto j: data_mo)
至
for (auto &j: data_mo)
此外,一个简单的改进是printData
通过 const 引用获取它的参数,因为向量不会改变。
void printData(const std::vector<double> &data_pr)