istream-iterator

___ qstntxt ___

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:)

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

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%     
___ answer250380 ___

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.

    
___ answer360344 ___

Verwenden:

%Vor%

Beachten Sie den leeren Parameter:

%Vor%     
___ answer250169 ___

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.

    
___ answer5569467 ___

Oder Sie könnten dies tun:

%Vor%     
___ answer252834 ___

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 .

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ answer250160 ___

(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%     
___ answer250237 ___

Errr ... copy_n () -Algorithmus?

    
___ answer253525 ___

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:)

    
___ tag123istreamerator ___ 'istream_iterator's sind Eingabe-Iteratoren, die aufeinanderfolgende Elemente aus einem Eingabestream lesen ___ tag123stlalgorithm ___ Eine Sammlung von Algorithmen, die als Vorlagenfunktionen im Header der C ++ - Standardbibliothek definiert sind. Diese Funktionen sind so ausgelegt, dass sie mit Elementenbereichen arbeiten, die normalerweise in Form von Iteratoren vorliegen. Sie sind so konzipiert, dass sie flexibel und wiederverwendbar sind, einen großen Funktionsumfang umfassen und bestimmten Leistungsgarantien entsprechen. ___ tag123iterator ___ Ein Iterator ist ein objektorientiertes Programmiermuster, das das Durchlaufen einer Sammlung unabhängig von der tatsächlichen Implementierung oder Objektadressen im physischen Speicher ermöglicht. Es ist eines der Verhaltensmuster der Gang of Four. ___
9
Antworten

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

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 mi...
30.10.2008, 13:02