Si hay alguna diferencia entre it1 e it2?¿Hay alguna diferencia entre usar .begin() vs .end() para std :: inserter para std :: set?
std::set<sometype> s;
auto it1 = std::inserter(s, s.begin());
auto it2 = std::inserter(s, s.end());
Si hay alguna diferencia entre it1 e it2?¿Hay alguna diferencia entre usar .begin() vs .end() para std :: inserter para std :: set?
std::set<sometype> s;
auto it1 = std::inserter(s, s.begin());
auto it2 = std::inserter(s, s.end());
En la práctica, no mucho. Si está insertando una gran cantidad de elementos ya en orden en un set
vacío, el segundo será algo más rápido, pero eso es todo. std::insert_iterator
llama al insert
con el iterador; std::set
lo interpreta como una sugerencia, y se inserta en tiempo constante (en lugar de lg n) si la inserción es inmediatamente anterior a la sugerencia. (En realidad, si el set
está vacía, creo que tanto va a hacer exactamente lo mismo.)
De http://www.sgi.com/tech/stl/insert_iterator.html
En el caso de un Ordenada asociativa de contenedores, sin embargo, el iterador en el constructor del insert_iterator es casi irrelevante . Los nuevos elementos no necesariamente formarán un rango contiguo; aparecerán en el lugar apropiado en el contenedor, en orden ascendente por clave. El orden en que se insertan solo afecta la eficacia: la inserción de un rango ya ordenado en un contenedor asociativo ordenado es una operación O (N).
¿Has leído alguna documentación? Esto es realmente fácil de descubrir a través de Google. –
bueno, son dos iteradores diferentes, ¿eso ayuda? además de eso, estarás dividiendo cabellos ... (es decir, perfil para averiguarlo) – Nim
@Nim - Me pregunto cómo está escrito en el estándar – Loom