C++ Iterator Index - Wie zugreifen?

Zephyro

Ensign
Registriert
Juni 2011
Beiträge
138
Hallo,

ich hab eine kurze Frage zu den Iteratoren in C++.

Wie bekommt man den Integer-Wert (index) der Position des Iterators?

Hier ein Bsp:


index:....01234
string s("Hallo");


Bis jetzt hab ichs über eine extra Variable gelöst, die in meiner schleife zusätzlich mitzählt aber das find ich nicht so toll.

Kann man da direkt über den Iterator den index ausgeben lassen?

schonmal Danke!

MfG Zephyro
 
Wie meinst du es genau ?
Innerhalb einer Schleife kann man doch direkt den Schleifenindex nehmen.
Z.B

for(int i = 0; i < 10; i++)
{
array;
}


Außerhalb nicht, weil es halt nur innerhalb des Scopes deklariert ist.
 
@Airbag

Es ist halt so, ich habe die Daten in einem...
Code:
std::vector<char>
und meine schleife sieht so aus:

Code:
int k=0;
for (iterator= data.begin(); iterator< data.end(); iterator++)
{
  // hier brauch in den index... (für eine if-Abfrage:)
  // tu etwas...
  k++;
}

@Blitzmerker

Das mit...
Code:
std::distance(container.start(),iter)
...probier ich mal, danke!

EDIT:
Ok, hat funktioniert, vielen Dank nochmal ;)
 
Zuletzt bearbeitet:
Zephyro schrieb:
[...]und meine schleife sieht so aus:

Code:
for (iterator= data.begin(); iterator< data.end(); iterator++)
{

Besser wäre

Code:
int k=0;
for (iterator= data.begin(); iterator [B][COLOR="Red"]!=[/COLOR][/B] data.end(); [B][COLOR="Red"]++[/COLOR][/B]iterator)
{

Postinkrement muß immer eine nutzlose Kopie mitschleifen (speichere den alten Wert, erhöhe dann den Iterator und gib anschließend den alten Wert zurück), die du beim simplen Iterieren eh nicht benötigst. Zwar können Compiler das häufig wegoptimieren, aber warum nicht gleich das schreiben, was man meint? ;)

P.S. Bei std::distance() aufpassen, mit welchen Containertypen du es verwendest. Bei Containern, die keinen random access (also indizierte Zugriffe) unterstützen, kann std::distance() recht teuer werden, so daß in solchen Fällen das Mitschleifen eines separaten Zählers günstiger sein kann.
 
Zuletzt bearbeitet:
Zurück
Oben