不打印更新的向量元素

问题描述 投票:0回答:1

下面的代码在替换小于第一个和最后一个元素的均值的元素之后,没有打印更新的矢量元素。

如果用户输入指定长度的数组并用均值替换小于第一个和最后一个元素均值的每个元素,如何改进此代码?

是否有更好的方法将向量传递给函数,或更有效的方法来管理内存?

#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;
}
c++ vector stl
1个回答
3
投票

modifyData需要基于范围的for循环通过引用来修改元素,否则您的修改将在元素的副本上进行,而不是在元素本身上进行。

更改

for (auto j: data_mo)

for (auto &j: data_mo)

此外,一个简单的改进是使printData通过const引用获取其参数,因为矢量不变。

void printData(const std::vector<double> &data_pr)
© www.soinside.com 2019 - 2024. All rights reserved.