Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo,

wie kann ich feststellen, auf die wievielte Positon im Vector der Iterator gerade zeigt?

Technician

So:

/* kleines Testarray */

long lArray[12] = {0,1,2,3,4,5,6,7,8,9,10,11};

/* Pointer zeigt aufs fünte!! Element (zero-based counting)*/

long* plPointer = &lArray[4];

/* Einfache Addresssubtraktion (vorher könnte man noch testen welcher Werte größer, gültig... ist) */

int iPos = (plPointer - lArray);

/* Ausgabe der Ergebnisse */

printf("Array starts at %x, pointer is at %x\n", lArray, plPointer);

printf("Pointer points to %dth element of array\n", iPos);

@Wasi:

Ich glaube, es geht um std::vector und std::vector::iterator, nicht um Arrays ;)

@Technician:

Ich glaube, dir bleibt nichts übrig, als mit einem weiteren Iterator den vector durchzugehen, und auf Gleichheit mit dem anderen Iterator zu prüfen.

Was auf den meisten Plattformen funktionieren sollte, aber nicht standardkonform ist: Vom gesuchten Iterator begin() abziehen. Das funktioniert dann, wenn der Vector als Array implementiert ist. Das ist zwar meistens der Fall, ist aber AFAIK nicht im Standard festgeschrieben.

Mit vector<bool> wird es aber mit hoher Wahrscheinlichkeit nicht gehen.

Originally posted by Klotzkopp

@Wasi:

Ich glaube, es geht um std::vector und std::vector::iterator, nicht um Arrays ;)

genau :)

Originally posted by Klotzkopp

Was auf den meisten Plattformen funktionieren sollte, aber nicht standardkonform ist: Vom gesuchten Iterator begin() abziehen. Das funktioniert dann, wenn der Vector als Array implementiert ist. Das ist zwar meistens der Fall, ist aber AFAIK nicht im Standard festgeschrieben.

ja, das habe ich jetzt auch gemacht:

((MyIt - MyVect.begin())+1)

Was mich nur gewundert hat:

warum gibt es dafür keine eingebaute Methode?

Bestimmen, auf welche Position im Vector der Iterator gerade zeigt, ist doch etwas, dass man häufig benötigt!

Originally posted by Klotzkopp

Mit vector<bool> wird es aber mit hoher Wahrscheinlichkeit nicht gehen.

In meinem Fall handelt es sich um vector<int>

Wie kommst du darauf, dass es mit vector<bool> höchstwahrscheinlich nicht funktionieren wird? *ist-mir-nämlich-überhaupt-nicht-klar* :confused:

Grüße,

Technician

Originally posted by Technician

Wie kommst du darauf, dass es mit vector<bool> höchstwahrscheinlich nicht funktionieren wird? *ist-mir-nämlich-überhaupt-nicht-klar* :confused:

vector<bool> ist in allen mir bekannten Implementierungen eine template-Spezialisierung, die die Elemente nicht als bool-Array, sondern als Bitfeld speichert.

Aber inzwischen denke ich, dass es doch gehen müsste. Es kommt auch nicht darauf an, wie die vector-Klasse implementiert ist. Solange es ein Random-Access-Iterator ist, sollte das mit dem begin() funktionieren.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.