Frage

Ich versuche VC6 Projekt mit VC10 zu kompilieren ... Ich erhalte einen Fehler C2678 mit set_intersection: ich einig Beispiel schrieb zu verstehen. Kann jemand erklären, wie diese Schnipsel zu kompilieren?

#include <vector>
#include <algorithm>
#include <iostream>
#include <set>
#include <string>

int main( )
{
    using namespace std;

    typedef set<string> MyType;

    MyType in1, in2, out;
    MyType::iterator out_iter(out.begin()); 

    set_intersection(in1.begin(),in1.end(), in2.begin(), in2.end(), out_iter);
}

Der Ausgang:

c: \ program files \ microsoft visual \ Studio 10.0 \ vc \ \ Algorithmus umfassen (4494): Fehler C2678: '=' binär: kein Operator definiert, die eine linke nimmt Operand vom Typ ‚const std :: basic_string <_Elem, _Traits, _AX>‘(oder gibt es keine akzeptable Umwandlung)

Wenn ich einen std::vector statt std::set verwenden die Kompilierung erfolgreich war. akzeptabel)

War es hilfreich?

Lösung

Try set_intersection(in1.begin(),in1.end(), in2.begin(), in2.end(), inserter(out, out.begin()) );

Das ist, weil set_intersection will mit dem Ausgang Iterator schreiben, die den Ausgangsbehälter verursacht in der Größe zu wachsen. Allerdings könnte dies nicht nur mit einem Iterator allein durchgeführt werden (es verwendet werden könnte, vorhandene Elemente zu überschreiben, aber nicht in der Größe wachsen)

Edit: die Tippfehler behoben. Verwenden Inserter für einen Satz hinzufügen. Ein back_inserter funktioniert nur für Vektoren und so weiter.

Edit 2: eine andere Tippfehler behoben. STL inserter erfordert ein zweites Argument, das ist ein Hinweis auf die Wahrscheinlichkeit Iterator Einfügeposition. Dank chepseskaf.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top