Frage

Ich habe einen Vektor von MyObjects im globalen Bereich.

std::vector<myObject>

Eine Methode wird ein Zeiger auf eines der Elemente im Vektor übergeben. Kann diese Methode den Zeiger erhöhen, um zum nächsten Element zu gelangen?

myObject* pmObj;

++pmObj; // the next element ??

oder sollte es vorgeben werden und eine std::Vector<myObject>::iterator Und das stattdessen inkrementieren?

Angenommen, der Vektor wird sich in der Zwischenzeit nicht ändern.

War es hilfreich?

Lösung

Ja - Die Standardgarantien in einer technischen Korrektur, dass der Speicher für einen Vektor zusammenhängend ist. Daher funktioniert die Inkrementierung von Zeigern in einen Vektor.

Andere Tipps

Ja, dies wird wie erwartet seitdem funktionieren std::vector ist vorgeschrieben, einen zusammenhängenden Speicher nach dem Standard zu verwenden. Ich würde vorschlagen, ein Paar Iteratoren einzugeben, wenn Sie mit einer Reihe von Objekten arbeiten. Dies ist so ziemlich das Standard -Idiom, wie es im STL verwendet wird. Dies macht Ihren Code auch etwas sicherer, da Sie einen expliziten Endpunkt für die Iteration haben, anstatt sich auf eine Zählung oder ähnliches zu verlassen.

Wenn der Vektor nicht neu zugesprochen wird und Sie sicher nicht aus den Grenzen des Vektors herauskommen, können Sie diesen Ansatz verwenden. Das Inkrementieren von Zeigern ist legal, und während Sie Platz für das nächste Element haben, können Sie dies tun, indem Sie den Zeiger erhöhen, da der Vektorpuffer ein einzelner Speicherblock ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top