Обновленные векторные элементы не печатаются - PullRequest
0 голосов
/ 17 февраля 2020

Приведенный ниже код не печатает обновленные векторные элементы после замены элементов, которые меньше среднего значения первого и последнего элемента.

Как можно улучшить этот код, пользовательский массив данных указанного length и заменяет каждый элемент, который меньше среднего значения первого и последнего элемента, средним значением.

Есть ли лучший способ передачи вектора в функцию или более эффективный способ управления памятью?

#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;
}

1 Ответ

5 голосов
/ 17 февраля 2020
Для

modifyData требуется диапазон for l oop для изменения элементов по ссылке, в противном случае ваши изменения работают с копиями элементов, а не с самими элементами.

изменить

for (auto j: data_mo)

на

for (auto &j: data_mo)

Кроме того, простое улучшение состоит в том, чтобы printData принял свой параметр по ссылке на констант, потому что вектор не изменяется .

void printData(const std::vector<double> &data_pr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...