Векторные петли выбрасывают 2 ошибки? - PullRequest
0 голосов
/ 23 октября 2019

lab26.cpp: В функции 'int meanUsingIterators (const std :: vector &)':
lab26.cpp: 35: 13: ошибка: нет соответствия для оператора / (типы операндов 'double' и 'std :: vector :: const_iterator {aka __gnu_cxx :: __ normal_iterator>} ')

mean = sum / end;

lab26.cpp: в функции' int meanUsingPointers (const std :: vector &) ':
lab26.cpp: 51: 13: ошибка: недопустимые операнды типов' double 'и' std :: vector :: const_pointer {aka const int *} 'для двоичного оператора' /.

среднее = сумма / конец;

================================================================================

#include <vector>
#include <cmath>

using namespace std;

int meanUsingIndexing(const vector<int>& v)   
{

    vector<int>::size_type i, end = v.size();
    double sum = 0;
    double mean;

    for(i = 0; i < end; i++)
    {
        sum += v.at(i); // or sum += v[i]
    }
    mean = sum / end;
    return round(mean);
}

int meanUsingIterators(const vector<int>& v)  
{

    vector<int>::const_iterator i, end = v.cend();
    double sum = 0;
    double mean;

    for(i = v.cbegin(); i < end; i++)      
    {
        sum += *i;
    }
    mean = sum / end;
    return round(mean);
}

int meanUsingPointers(const vector<int>& v)    
{

    vector<int>::const_pointer i, end = v.data() + v.size();
    double sum = 0;
    double mean;

    for(i = v.data(); i < end; i++)
    {
        sum += *i;
    }
    mean = sum / end;
    return round(mean);
}

1 Ответ

2 голосов
/ 23 октября 2019

no match for ‘operator/’ (operand types are ‘double’ and ‘std::vector::const_iterator.

Итак, double и итератор со знаком деления между ними - вот что вызывает это.

Когда end = v.cend(); выне может использовать end в качестве количества элементов (чтобы получить среднее значение). Замените mean = sum / end; на mean = sum / v.size();

invalid operands of types ‘double’ and ‘std::vector::const_pointer.

Здесь это double и const* со знаком деления между ними, который являетсяпроблема.

Когда end = v.data() + v.size();, вы не можете использовать end в качестве количества элементов (чтобы получить среднее значение). Заменить mean = sum / end; на mean = sum / v.size();

...