Pregunta

Estoy intentando compilar proyecto VC6 con VC10 ... Obtengo un error C2678 con set_intersection: Escribí algunos ejemplos de entender. ¿Alguien puede explicar cómo compilar esta fragmentos?

#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);
}

La salida:

  

c: \ archivos de programa \ Microsoft Visual \ estudio 10,0 \ VC \ include \ algoritmo (4494): C2678 de error: '=' binario: no definido por el operador que tiene una mano izquierda operando de tipo 'const std :: basic_string <_Elem, _Traits, _Ax>'(o no hay conversión aceptable)

Si uso un std::vector en lugar de std::set la compilación tuvo éxito. aceptable)

¿Fue útil?

Solución

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

Esto se debe a set_intersection quiere escribir en el iterador de salida, lo que hace que el contenedor de salida a crecer en tamaño. Sin embargo, esto no se podía hacer con sólo un iterador solo (se podría utilizar para sobrescribir los elementos existentes, pero no crecen en tamaño)

Editar: arreglado el error tipográfico. Uso de inserción para añadir a un conjunto. Un back_inserter sólo funciona para los vectores y tal.

Editar 2: fija otro error tipográfico. inserter STL requiere un segundo argumento que es un iterador de pista para la posición de inserción probable. Gracias chepseskaf.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top