Supongo que esta es una pregunta simple. Necesito hacer algo como esto:
std::set<int> s1, s2;
s1 = getAnExcitingSet();
std::transform(s1.begin(), s1.end(), std::back_inserter(s2), ExcitingUnaryFunctor());
Por supuesto, std::back_inserterno funciona ya que no hay push_back.
std::insertertambién necesita un iterador? No lo he usado, std::inserterasí que no estoy seguro de qué hacer.
¿Alguien tiene alguna idea?
Por supuesto, mi otra opción es usar un vector para
s2y luego ordenarlo más tarde. ¿Quizás eso sea mejor?

inserter(vec, vec.end())funciona para vectores, ¿por qué alguien usa back_inserter en primer lugar?insertlugar depush_backen un vector debe ser aproximadamente idéntico (O (1)) cuando no es necesario mover ningún elemento.v.insert(x, v.end())tendrá una rama adicional al principio (debido a que mueve n elementos, pero aquí n es cero). Sin embargo, usarinserter1) comunica una intención diferente a usarpush_back2) es inusual y hace que el lector se detenga y piense 3) es una pesimización prematura.En 2016 hubo una propuesta para tener un "
inserteriterador de argumento único ". https://isocpp.org/files/papers/p0471r0.html . No pude encontrar si la propuesta avanzaba. Creo que tiene sentido.Por ahora puede tener este comportamiento definiendo la función de creador:
Usado como:
fuente
insert_iterator::operator=). ¿Deberia?insert(yend). parece queforward_listno tiene unainsertoperación en primer lugar, soloinsert_after. E incluso si eso se cambia, no se puede insertar después del final, creo. ¿No puedes usar unstd::listen su lugar?NewContaner new_container(old_other_container.begin(), old_other_container.end()).existing_list = std::list(c.begin(), c.end(), existing_list.get_allocator())Muy bien, creo que esa es mi respuesta. ¡Salud!