Удаление максимального элемента вектора

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

#include <iostream>
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
using namespace std;
int main()
{
    srand(time(0));
    int n, i, j, index,k,m,p,f,ta;
    cout << "Vvedite chislo ellementov massiva" << endl;
    cin >> n;
    vector<int>a(n);
    vector<int>::iterator it;
    cout << "Ishodniy massiv: ";
    for(i=0; i<n; i++) {
        a[i]=rand() % 50-25;
        cout << a[i]<<",";
    }
    cout << endl;
cout<<"Udalim maksimalniy ellement"<<endl;
    int max = 0;
    index = 0;
  for (it = a.begin(); it!= a.end(); ++it)
  if (max < *it)
    max = --*it;
   **a.erase(max);**
    cout << "Poluchenniy massiv : ";
    for (it = a.begin() ; it!=a.end() ; ++it){
            cout<<*it;}
cout<<endl;
    system("pause");
}

erase удаляет по номеру элемента + как показано во всех примерах, вызывать его надо так:
a.erase(a.begin() + ind)

Удалять по значению можно с помощью remove

a.erase(std::remove(a.begin(), a.end(), max), a.end());

https://stackoverflow.com/a/3385251/964478

А без begin оно разве не работает? :thinking: Обращаться к элементам можно просто по индексу, вроде.

Так ему итератор нужен, а не индекс.

iterator erase(const_iterator position);

а если не erase, а просто обращаться?

К чему обращаться? Свою функцию удаления велосипедить что ли?

если не удалять, а просто читать содержимое, тогда тоже итератор нужен?

Смотря как читать :man_shrugging:
Самому конечно можно по индексу, что в коде выше и есть.
или еще проще если только значения нужны: for (int num : a) { cout << num; }

А функции STL обычно итераторы используют. Например, потому что не во всех контейнерах есть индексы.