vector::begin() liefer nur const_iterator



  • Hallo, ich habe eine Frage: ich muss für die uni den gaußalgorithmus implementieren. um als pivot-element immer das betragsmäßig größte zu wählen, soll ich eine methode getMaxElement() haben, die einen iterator auf das betragsmäßig größte element einer zeile zurückliefert. meine klasse zeile enthält einen vektor _data mit den zeileneinträgen. in meiner methode

    template<class t>
    typename vector<t>::iterator zeile<t>::getMaxElement()const
    {
        typename vector<t>::iterator it=this->_data.begin();
        for(typename vector<t>::iterator i = this->_data.begin(); i!=this->_data.end(); i++)
        {
            if(*i>*it)
            {
                it=i;
            }
        }
        return it;
    }
    

    will ich eigentlich die elemente durchlaufen. wenn ich das kompilieren will, kriege ich eine fehlermeldung, der compiler könne nicht von const_iterator in iterator konvertieren. Laut cplusplusreference sollte .begin() aber eigentlich eh einen "normalen" iterator zurückliefern. woran kann das liegen? vielen dank schon mal 😃

    PS: was auch merkwürdig ist, ist, dass meine IDE (Code::Blocks) bei dem Menü was aufklappt, wenn ich _data.b... eintippe, wo die ganzen vorschläge drinstehen, auch nur begin(): const_iterator vorgeschlagen wird, dass dafür gleich doppelt 😕



  • getMaxElement ist const => this ist const => _data ist const => begin liefert const itarator.

    Benutze auto oder const_iterator.



  • Es gibt übrigens auch std::max_element.



  • Vielen Dank, manni66, jetzt läufts 👍


Log in to reply