Вектор c ++ не соответствует оператору * при умножении двух элементов вектора - PullRequest
0 голосов
/ 06 марта 2020

Это часть кода, который я написал:

for(int i=1;i<=n;i++) a.push_back(i);
while(a.size()!=1){
    b+=a.begin()*a.end()+a.begin()+a.end();
    a.erase(a.begin());
    a.erase(a.end());
    }

Это первый раз, когда я использую векторы, поэтому я не знаю, где я ошибся. Я получаю ошибку:

 error: no match for ‘operator*’ (operand types are ‘std::vector::iterator {aka __gnu_cxx::__normal_iterator >}’ and ‘std::vector::iterator {aka __gnu_cxx::__normal_iterator >}’)
       b+=a.begin()*a.end()+a.begin()+a.end();
          ~~~~~~~~~^~~~~~~~

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

begin() и end() возврат итераторы . Вы не можете умножить итераторы. Используйте front() и back() для доступа к первому и последнему значению.

b += a.front() * a.back() + a.front() + a.back();
0 голосов
/ 06 марта 2020

Похоже, вы слишком усложняете этот код. Вам не нужен вектор для вычисления этого значения.

int f(int n) {
    int r = 0;
    for(int i=1; i <= (n + 1)/2; i++) {
        auto b = i;
        auto e = n + 1 - i;
        r += b * e + b + e;
    }
    return r;
}
...