Abflachen einer Sequenz von Sequenzen (von Sequenzen)

8

Ich benutze boost :: fusion.

Sagen wir, ich habe etwas wie das Folgende:

%Vor%

Ich möchte eine Funktion f so erzeugen, dass

%Vor%

d. eine abgeflachte Version der Sequenz.

Es macht mir nichts aus, wenn dies eine Ansicht der ursprünglichen Sequenz oder eines tatsächlichen Vektors ist.

Ich habe keine Probleme in C ++ 0x, wenn es auf GCC 4.5.1 kompilieren kann.

Hinweis:

Obwohl ich es vorziehen würde, die Datenelemente nicht einzuschränken, wenn es hilft, können Sie freilich verlangen, dass die "Daten" -Elemente alle von einer gemeinsamen Basisklasse abgeleitet sind.

d. h.

%Vor%

Dann

%Vor%

Ich denke, dann können Sie herausfinden, was die Datenelemente sind, indem Sie "is_base_of" verwenden.

    
Clinton 07.12.2010, 08:50
quelle

1 Antwort

8

Hier ist eine mögliche Lösung, die join rekursiv. Im Prinzip macht es folgendes (in Pseudo-Haskell):

%Vor%

Rekursiv wird der abgeflachte Kopf mit dem abgeflachten Schwanz verknüpft.

Diese Lösung ist höchstwahrscheinlich nicht die effizienteste, da sie viele Ansichten selbst für einzelne Werte erstellt. Ein besserer Ansatz könnte darin bestehen, die resultierende Sequenz als Parameter in rekursiven Aufrufen zu übergeben und die einzelnen Elemente direkt darin einzufügen, möglicherweise unter Verwendung von fold .

Hier ist der Code (Disclaimer: Ich habe das ziemlich schnell geschrieben, damit der Code mit Bugs und / oder nicht-idiomatischen Methoden gefüllt werden kann):

%Vor%     
Luc Touraille 07.12.2010, 11:59
quelle

Tags und Links