c++ iterator Frage

elektro2

Cadet 4th Year
Registriert
Feb. 2014
Beiträge
67
Hallo zusammen.. Ihr habt mir ja empfohlen, mich ein bisschen mit Lambdas und Algorithm auseinanderzusetzen.
Eigentlich läuft das lernen auch echt gut!

In diesem Beispiel verstehe ich aber nicht, warum die letzte for schleife die 22 nicht mit ausgiebt.

Ich habe ja den Wert 22 gecaptured und mein Iterator zeigt durch " find_if" ja auf diesen Wert.

Warum gibt also die for_schleife diesen wert nicht mehr aus?

Code:
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

using namespace std;

int main()
{
	int array[] = { 2, 5, 9, 20, 22, 33, 30, 42, 55 };
	vector <int> myVec(array, array + 9);

	for (auto i : myVec)
	{
		cout << i << " ";
	}
	

	int a = 22;

	vector<int>::iterator it = find_if(myVec.begin(), myVec.end(), [a](int b){return b == a; });

	for (it; it != myVec.end(); it++)
	{
		cout << *it << endl;
	}

	
	
	cin.get();

	return 0;
}
 
Das letzte Element ist doch das Ende und beim Erreichen des Endes brichst du ab.
 
Das letzte Element ist die 55.. dass die drin ist, ist mir klar. Aber warum ist die 22 nicht mit drin?
Mein iterator springt doch an die position, an der die 22 liegt. Diese wird aber nicht mit angezeigt.
 
Mal im Debugger laufen lassen? :)
Viele schrecken davor immer zurück, aber es ist garnicht so übel wie man vielleicht denkt.
 
Haha sorry Leute.. ich hätte mal lieber nach der ersten Ausgabe ein cout << endl; verwenden sollen. Der Threat kann geschlossen werden :)
 
Nee, kann er ned. :p Iteratoren lieber immer mit pre-increment als mit post-incremement erhöhen. post-increment muß nämlich immer intern eine Kopie des Iterators mit dem Wert vor dem Inkrementieren zurückgeben. Wird wahrscheinlich vom Compiler wegoptimiert, aber trotzdem. Führe dir vor Augen, was post-increment heißt: "Erhöhe den Wert um eins und gib mir dann den alten Wert zurück." Willst du doch gar nicht; du willst nur den Iterator um eine Position nach vorn schieben -> also pre-increment.
 
Zurück
Oben