Wie liest man eine beliebige Anzahl von Werten mit std :: copy?

8

Ich versuche, eine entgegengesetzte Aktion zu programmieren:

%Vor%

sollte es in etwa so sein:

%Vor%

Aber ich bin fest mit dem 'Ende' Iterator - Eingabe-Interaktoren können nicht verwenden std :: advance und weder ich kann zwei Streams mit der gleichen Quelle verwenden ...

Gibt es einen eleganten Weg, um das zu lösen? Natürlich kann ich for-Schleife verwenden, aber vielleicht gibt es etwas Schöneres:)

    
Miro Kropacek 30.10.2008, 13:02
quelle

9 Antworten

3

Sie können vom istream_iterator & lt; T & gt; ableiten.
Obwohl Daemin-Generator-Methode eine weitere Option ist , obwohl ich direkt in die Menge erzeugen würde, anstatt einen Zwischenvektor zu verwenden.

%Vor%     
Martin York 30.10.2008, 16:03
quelle
3

Verwenden:

%Vor%

Beachten Sie den leeren Parameter:

%Vor%     
Jeffrey Martinez 11.12.2008 18:19
quelle
2

Errr ... copy_n () -Algorithmus?

    
Arkadiy 30.10.2008 13:53
quelle
2

Wenn ich mir das ein wenig ansehe, glaube ich nicht, dass das direkte Lesen in ein Set funktionieren wird, da man es einfügen muss, um die Elemente hinzuzufügen (ich könnte mich irren, es ist ziemlich früh am Morgen). Obwohl ich die STL-Dokumentation in VS2005 kurz betrachte, denke ich, dass etwas mit der Funktion generate_n funktionieren sollte, zum Beispiel:

%Vor%

Hoffentlich ist das entweder Ihr Problem gelöst, oder Sie haben überzeugt, dass die Schleife im großen Schema der Dinge nicht so schlecht ist.

    
Daemin 30.10.2008 14:38
quelle
1

Wie wäre es mit einem alternativen Iterator, um die Traversierung durchzuführen und dann ein Funktionsobjekt (oder Lambda) zu verwenden, um den Container auszufüllen?

%Vor%

Das setzt natürlich voraus, dass Sie einen C ++ 0x -kompatiblen Compiler haben.

BTW, 'counting_iterator & lt; & gt;' ist Teil von Boost.Iterator .

    
Dean Michael 31.10.2008 07:52
quelle
1

Oder Sie könnten dies tun:

%Vor%     
jnyanez 06.04.2011 16:01
quelle
0

Ja sdg aber wenn ich eine andere Datenstruktur in dieser Datei / Stream verwenden möchte? Ich sollte wahrscheinlich hier explizit schreiben, ich möchte nach diesem Set noch ein anderes Material speichern, deshalb speichere ich auch die Größe.

    
Miro Kropacek 30.10.2008 13:28
quelle
0

(Bearbeitet: Ich hätte die Frage näher lesen sollen ...)

Obwohl etwas verdächtig ist, können Sie ungefähr das richtige Verhalten erzielen, wenn Sie einen Eintrag in der Datei haben, der die erste Schleife "fehlschlägt", dann das Fehlerbit im Stream löscht und mehr liest.

Daten ohne explizite Größe, aber wie diese

%Vor%

Fed auf den Code unten scheint zu tun, was ich meinte, zumindest auf VS2005 mit STLPort.

%Vor%     
sdg 30.10.2008 13:25
quelle
0

Danke für die Ideen Jungs. Selbst wenn diese Dinge cool scheinen, werde ich sicherlich keinen neuen Klassen- / Iterator dafür erstellen ;-) Ich verstehe besser, warum SGI sich entschieden hat, den "copy_n" -Algorithmus jetzt einzuschließen:)

    
Miro Kropacek 31.10.2008 13:48
quelle