Du bist nicht angemeldet.

Werbeanzeige

Nimelrian

Alter Hase

Beiträge: 1 238

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

21

13.08.2017, 03:36


Es geht bei sowas vor allem um Aussagekraft. Bei transform weiß ich sofort, dass jedes Element einer Range auf ein neues Element gemapped wird. Bei accumulate weiß ich, dass alle Elemente einer Range zu genutzt werden, um ein einzelnes Ergebnis zu bauen. Ein anderer, sehr cooler Algorithmus der STL ist übrigens stable_partition.

Wenn man dabei noch konsequent pure functions einsetzt, bekommt man die Vorteile funktionaler Sprachen: geringere Fehleranfälligkeit und kostenlose Parallelisierung (scheinbar für C++17 geplant: http://www.modernescpp.com/index.php/par…emplate-library)


Korrekt, und einfache Testbarkeit noch dazu. Pure Functional Programming ist etwas tolles und wird in den "etablierten" Sprachen mMn viel zu wenig umgesetzt.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

BlueCobold

Community-Fossil

Beiträge: 10 652

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

22

13.08.2017, 07:50

Python und JavaScript bieten mMn dafür eigentlich ganz guten Support.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

23

13.08.2017, 13:08

Die Funktionalität bzgl. remove(_if) ist leicht zu erklären. remove_if hat keine Ahnung vom Container, auf dem es operiert, der Algorithmus arbeitet ja nur mit Iteratoren. Wie genau Elemente in einem Container entfernt werden, funktioniert je nach Container unterschiedlich (Bei einer list z.B. anders als bei einem vector). Deswegen übergibst du ja den zurückgegebenen Iterator von remove_if an die erase-Funktion des Containers, denn die weiß, wie Elemente im Container gelöscht werden.

Warum das so ist, ist mir mehr oder weniger schon klar gewesen, allerdings hätte man hier bei der Namensgebung ein wenig eindeutiger sein können. Das ist das, was mich ein wenig stört. Der Name impliziert ein entfernen der Elemente, nicht ein verschieben!
Besucht mich und meinen Blog unter:
www.simple-world.org

Du magst Tower Defense?
Dann probier doch mal Coregrounds aus ;)

dot

Supermoderator

Beiträge: 9 814

Wohnort: Graz

  • Private Nachricht senden

24

13.08.2017, 16:36

Wenn remove() bzw. remove_if() die Elemente deiner Meinung nach nicht entfernt, dann musst du mir nun bitte erklären, wo genau ich all die nicht entfernten Elemente nachher finden kann. Wenn sie nicht entfernt wurden, dann müssen sie ja irgendwo sein!? ;)

25

13.08.2017, 16:53

Zitat

Removing is done by shifting (by means of move assignment) the elements in the range in such a way that the elements that are not to be removed appear in the beginning of the range.


http://en.cppreference.com/w/cpp/algorithm/remove

Noch Fragen?
Besucht mich und meinen Blog unter:
www.simple-world.org

Du magst Tower Defense?
Dann probier doch mal Coregrounds aus ;)

BlueCobold

Community-Fossil

Beiträge: 10 652

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

26

13.08.2017, 17:09

Es wird schon was removed. Nämlich Elemente aus einer Range. Aber nicht Elemente aus einem Container. Dafür ist remove_if aber auch gar nicht gedacht. Das Ergebnis von remove_if hingegen ist genau dafür gedacht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

27

13.08.2017, 17:28

Es wird schon was removed. Nämlich Elemente aus einer Range. Aber nicht Elemente aus einem Container. Dafür ist remove_if aber auch gar nicht gedacht. Das Ergebnis von remove_if hingegen ist genau dafür gedacht.

Stimmt so auch nicht. Zwischen Begin und End der Range liegen vor- wie nach dem Aufruf die gleichen Elemente. Lediglich der Rückgabewert gibt hier Auskunft. Allerdings; und das ist das was ich eingangs erwähnt habe, wundere ich mich über die Namensgebung, die hier nunmal gar nicht passt. Es ist ein sort nach 2 Zuständen -> true (verschieb ans Ende der Range) oder false (mach nichts damit). Mehr nicht.
Besucht mich und meinen Blog unter:
www.simple-world.org

Du magst Tower Defense?
Dann probier doch mal Coregrounds aus ;)

dot

Supermoderator

Beiträge: 9 814

Wohnort: Graz

  • Private Nachricht senden

28

13.08.2017, 18:54

Zitat

Removing is done by shifting (by means of move assignment) the elements in the range in such a way that the elements that are not to be removed appear in the beginning of the range.


http://en.cppreference.com/w/cpp/algorithm/remove

Noch Fragen?

Jop: wo find ich nach dem Aufruf von std::remove die Elemente die removed wurden, wenn sie deiner Meinung nach nicht removed werden!? ;)

Es wird schon was removed. Nämlich Elemente aus einer Range. Aber nicht Elemente aus einem Container. Dafür ist remove_if aber auch gar nicht gedacht. Das Ergebnis von remove_if hingegen ist genau dafür gedacht.

Stimmt so auch nicht. Zwischen Begin und End der Range liegen vor- wie nach dem Aufruf die gleichen Elemente. Lediglich der Rückgabewert gibt hier Auskunft. Allerdings; und das ist das was ich eingangs erwähnt habe, wundere ich mich über die Namensgebung, die hier nunmal gar nicht passt. Es ist ein sort nach 2 Zuständen -> true (verschieb ans Ende der Range) oder false (mach nichts damit). Mehr nicht.

Was du da beschreibst wäre ein std::stable_partition. std::remove macht was andres. Lies die von dir gepostete Beschreibung noch mal. Wo genau steht dort dass irgendwas ans Ende der Range verschoben wird? Insbesondere auch

Zwischen Begin und End der Range liegen vor- wie nach dem Aufruf die gleichen Elemente.

Wo steht das? ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (13.08.2017, 19:24)


BlueCobold

Community-Fossil

Beiträge: 10 652

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

29

13.08.2017, 20:46

Stimmt so auch nicht. Zwischen Begin und End der Range liegen vor- wie nach dem Aufruf die gleichen Elemente.
Seufz. Ist das 'ne ernsthafte Diskussion gerade oder eine "ich habe Recht und du nicht"-Geschichte?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige