Effektivster Weg um bestimmte std::vector einträge zu ändern



  • was ist die effektivste Möglichkeit um in einem std::vector gezielt die Einträge einer bestimmten index Menge alle auf den gleichen Wert zu setzen?

    mit ner range-based for loop drüber laufen und einzeln assignen?


  • Mod

    Im Zweifelsfalle immer std::fill. Wenn es passende Funktionen in der Standardbibliothek für etwas gibt, sind diese potentiell stets besser als alles, was du mit standardkonformem Code selber programmieren könntest. Beispielsweise könnte std::fill bei POD-Typen die Kenntnis über die interne Struktur des vectors benutzen und da mit irgendwelchen Rechentricks die Speicherbandbreite optimal ausnutzen. Und schlimmstenfalls, wenn gar keine Optimierung möglich ist, macht std::fill eben auch nur eine Schleife. Das heißt, schlimmstenfalls ist es mindestens so gut wie der beste (portable) Code, den du schreiben kannst.



  • aber meine Indices sind nicht alle aufeinanderfolgend


  • Mod

    @SeppJ: Lies die Frage noch einmal.

    Ich würde sagen, nein, es gibt keinen besseren Weg, außer du befindest dich auf einer Vektormaschine und kannst eine scatter instruction ausführen, oder aber du gehst tatsächlich sequentiell durch den Vektor und maskierst die Vektor-Zuweisung mit der Bedingung, dass der Index in der Menge liegt.

    Vektormaschinen haben den Vorteil, dass sie parallele Zugriffe auf entfernten Speicher unterstützten können, bpsw. durch ihre Aufteilung von Hauptspeicher mittels memory banks. In dem Fall könntest du dich über deine ISA informieren, aber da du wahrscheinlich für Desktop CPUs entwickelst, hat das hier keine Bedeutung.


Anmelden zum Antworten