Vector Index nicht akzeptiert



  • Moin,
    Ich lerne gerade erst C++ und hoffe ihr könnt mir weiterhelfen.

    In meiner Klasse gibt es einen Vektor "BeispielVektor" bestehend aus integers. Ich habe eine member function "beispielfunktion" in der Klasse, die aus einer anderen memberfunktion heraus aufgerufen wird und eine bestimmte zahl erhält. Diese Zahl ist im Vektor vorhanden.

    Ich suche dann den Index dieser Zahl im Vektor mit der distance function. Das funktioniert auch sehr gut und ich speicher diesen index in der integer variablen "index". Wenn ich den index dann in der konsole über std::cout ausgebe stimmt auch alles.

    Wenn ich nun aber versuche die zahl im vektor auszugeben, dann funktioniert das nicht mehr.

    Hier der Code.

    void Klassenname::beispielfunktion (int Zahl)
    {
    	std::vector<int>::const_iterator it1, it2;
    	it1 = m_ID.begin();
    	it2 = iterator1 + Zahl;
    	int index = std::distance(it1, it2) - 1;
    
    	std::cout << "Funktioniert wunderbar: " << index;
    
            std::cout << "Funktioniert ebenfalls: " << Beispielvektor[3];
    
    	std::cout << "Funktioniert nicht: " << Beispielvektor[index];
    
    }
    

    Kann mir irgendjemand sagen, wo der Fehler ist?



  • it2 = iterator1 + Zahl;
    

    ->

    it2 = it1 + Zahl;
    

    ?



  • Außerdem verlangt der []-Operator des vectors als Parameter std::size_t, nicht int.
    Das Ergebnis von distance ist std::ptrdiff_t, was in der Regel das selbe ist wie std::size_t, also kann index ohne jeden Cast einfach vom Typ std::size_t sein.



  • Nathan schrieb:

    std::ptrdiff_t, was in der Regel das selbe ist wie std::size_t

    Alleine schon nicht, weil ersterer signed und zweiterer unsigned ist.



  • 😮
    Oh, mein Fehler.



  • ichbinsisyphos schrieb:

    it2 = iterator1 + Zahl;
    

    ->

    it2 = it1 + Zahl;
    

    ?

    Sorry, den fehler hatte ich bereits korrigiert. Habe aus Versehen die falsche Version des Quellcodes hier reinkopiert.

    Also das heißt ich ändere index von int zu std::size_t ??

    Wieso klappt es denn nicht wenn index vom typ int ist?

    Ich habe es an anderer Stelle versucht mit einem int und da ging es. Was sind die Bedingungen dafür, dass der [] operator mit ints klarkommt?



  • hmm? Stell nochmal deine Frage und zeig einen kompilierbaren Quellcode. Das hier ist sonst verwirrend. Ich dachte dein Vektor heißt BeispielVektor. Was ist dann m_ID fürn zeug? Außerdem, wo suchst du eine Zahl in dem Vektor... das verstehe ich auch nicht.



  • Hier wird wiedermal auf völlig unwichtige Details eingegangen, das eigentliche Problem aber völlig ignoriert.

    Das std::distance ist einfach komplett falsch. Du brauchst std::find nicht distance.
    Oder ev. zuerst std::find und dann distance wenn du den index wirklich brauchst.


Log in to reply