BOOST_FOREACH versus for-Schleife
Ich würde gerne Ihre Beratung in Bezug auf die Nutzung von BOOST_FOREACH.
Habe ich gelesen, um es nicht wirklich zu empfehlen in Bezug auf Leistung einen sehr schweren Kopf.
Außerdem erzwingt die Verwendung der "Pause" und "weiter" - Aussagen, da kann man nicht wirklich eine exit-Bedingung angetrieben von einem Boolean und ich habe immer gesagt, dass "Pause" und "weiter" sollten vermieden werden, wenn möglich.
Natürlich die Vorteile sind, dass Ihr es nicht direkt mit Iteratoren, die Leichtigkeit der Aufgabe, die Iteration durch einen container.
Was haltet Ihr davon ?
Denken Sie, dass wenn verwendet, sollte es verabschiedet werden, systematisch zu gewährleisten Homogenität in einem Projekt oder Ihre Verwendung wird empfohlen nur unter bestimmten Umständen ?
IIRC gab Es Gründe, um zu vermeiden brechen und weiter zurück in die guten alten Zeiten, wo die Menschen nicht haben RAII Muster und optmimizers könnte man in Probleme, wenn die Schleifen würden zu "nervös". Das waren die Tage der "single-entry-single-exit" - dogma, wo die Funktionen hatte, nur eine return-Anweisung, Tonnen von wenn ' s und einige springen. Und es gibt Menschen, die lernten, diese Dogmen vor äonen, nie fragte Sie und verbreiten Sie, um die Jugendlichen in Zeiten, in denen Sie keinen Sinn ergeben aber viel ärger.
Während ich Stimme mit Ihnen, ich muss sagen, dass es sein könnte Wert in nicht mit break oder continue in Schleifen. Wenn Sie behalten diese keywords, while-Schleifen und sind damit einverstanden, Sie nicht zu verwenden in for-Schleifen, die Absicht klarer. Aber das ist einfach zu viel IMHO, würde ich nicht raten.
InformationsquelleAutor codeJack | 2013-02-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde sagen C++ - range-based-loops ersetzen. Dies ist ein äquivalent von dieses Beispiel BOOST_FOREACH:
Habe ich nie gefunden, die ich brauchte, um es in ++03.
Hinweis bei Verwendung der range-based-loop-over-Container mit teuren, Elemente kopieren, oder in einen generischen Kontext, ist es am besten zu verwenden
const&
auf die Elemente:Ähnlich, wenn Sie ned zu ändern, die Elemente des Containers, verwenden Sie eine nicht-const & (
auto& elem : v
).detaillierte Beschreibung: msdn.microsoft.com/en-us/library/vstudio/dd293667.aspx (Referenzen und cv-Qualifizierer)
ja, aber int sein Fall wir haben Einzel -
char
s, und ich war versucht zu schreiben das äquivalent derBOOST_FOREACH
Beispiel.war nicht wirklich eine Kritik über Ihre Antwort - nur um eine Verlängerung, weil eine Menge Leute sind verwirrt, wenn mit auto
Ich habe eine Anmerkung darüber.
InformationsquelleAutor
In der Programmierung, übersichtlichkeit ist Trumpf. Ich habe immer verwendet boost foreach in C++03, fand es sehr viel besser lesbar als der handgeschriebene Schleife, die header-Größe wird nicht Sie zu töten. @Juanchopanza richtig bemerkte, natürlich, diese Frage ist veraltet, in C++11.
Ihre Anliegen mit break und continue unbegründet sind und wahrscheinlich kontraproduktiv. Mit der traditionell langen for-Schleife Header von C++03, neigen die Menschen dazu nicht Lesen Sie die loop-header und übersehen jede Bedingung Variablen, die verstecken sich in den loop-header. Besser machen Ihre Absicht, die explizit mit break und continue.
Wenn Sie sich entschieden haben, um boost foreach verwenden Sie es konsequent. Es soll verwendet werden, um zu ersetzen, das Brot-und-butter-Schleifen, nachdem alle.
InformationsquelleAutor
Ich gerade ersetzt, die eine Verwendung von BOOST_FOREACH mit einer einfachen for-Schleife und bekam eine 50% speedup, also ich würde sagen, es ist definitiv nicht immer das beste, was zu verwenden.
Sie wird auch nicht bekommen, einen Schleifenzähler (z.B. "ich"), die manchmal Sie wirklich brauchen. Ich persönlich bin nicht ein fan, aber YMMV, wenn es zu Ihrem Stil passt besser.
BTW - einen "schweren Kopf" hat keine Auswirkungen auf die Leistung des Programms, nur die compilation-Zeit.
guter Punkt, aber es ist zu lange her (ich habe ja meine version control Systems, aber nicht finden können, ändern).
InformationsquelleAutor