Referenz auf ein Teilsegment eines Vektors?

8

Ich habe eine C ++ - Funktion in der Blackbox, auf die ich keinen Zugriff auf den Quellcode habe:

%Vor%

Diese Funktion modifiziert das Element des Eingabevektors in unbekannter Weise.

Das Problem, das ich jetzt habe, ist, dass ich die Black-Box-Funktion nur für ein Teilsegment eines Vektors anwenden möchte, zum Beispiel die letzten 500 Elemente eines Vektors. Also, das ist die Routine, die ich geschrieben habe, um dieses Ziel zu erreichen:

%Vor%

Dieser Code funktioniert vielleicht, aber gibt es dafür einen besseren Weg?

Es wäre gut, wenn ich eine Vektorreferenz nur für ein Segment von definieren könnte ein vorhandener Vektor, anstatt eine Kopie zu erstellen. Ich bin nicht so zufrieden mit dem Kopieren und Tauschen von Teilen in dem obigen Code; seit dieser Routine ist so oft aufgerufen, denke ich, das wiederholte Kopieren und Tauschen verlangsamt den Code. Wenn ich die genauen Operationen durch die Block-Box kannte, würde ich die Funktion so umschreiben, dass sie Vektor-Iteratoren als Eingabe benötigt Argumente. Leider ist das momentan nicht möglich.

    
user68390 20.02.2015, 04:34
quelle

1 Antwort

2

Es gibt keinen genau definierten Weg, um diese Funktionalität zu erreichen. Mit großen Vorbehalten und Warnungen kann es (zumindest für eine GCC-Version) wie unten gehackt werden, oder Sie könnten vielleicht etwas mit besser definiertem Verhalten schreiben, aber basierend auf der aktuellen std::vector -Implementierung Ihres Compilers ....

Also ... gehackt. Dies funktioniert nicht, wenn insert / erase / resize / reserve / clear / push_back oder eine andere den Gesamtvektor beeinflussende Operation ausgeführt wird. Es ist möglicherweise nicht tragbar / arbeite weiter / arbeite mit allen Optimierungsstufen / arbeite dienstags / benutze es auf eigene Gefahr etc .. Es hängt von der leeren Basisklassenoptimierung ab.

Sie benötigen einen benutzerdefinierten Zuordner, aber es gibt einen Haken: Der Zuordner kann keinen Status haben oder das binäre Layout des vector -Objekts wird geändert, daher enden wir damit:

%Vor%

Ausgabe:

%Vor%

Siehe hier

    
Tony D 20.02.2015, 06:52
quelle

Tags und Links