Eu acho que esta é uma pergunta simples. Eu preciso fazer algo assim:
std::set<int> s1, s2;
s1 = getAnExcitingSet();
std::transform(s1.begin(), s1.end(), std::back_inserter(s2), ExcitingUnaryFunctor());
Claro, std::back_inserter
não funciona, pois não há push_back
.
std::inserter
também precisa de um iterador? Eu não usei, std::inserter
então não tenho certeza do que fazer.
Alguém tem alguma ideia?
Claro, minha outra opção é usar um vetor para
s2
e apenas classificá-lo mais tarde. Talvez seja melhor?
inserter(vec, vec.end())
funciona para vetores também, por que alguém usa back_inserter em primeiro lugar?insert
vez depush_back
em um vetor deve ser aproximadamente idêntico (O (1)) quando nenhum elemento precisa ser movido.v.insert(x, v.end())
terá uma ramificação adicional no início (devido a mover n elementos, mas aqui n é zero). No entanto, usarinserter
1) comunica uma intenção diferente de usarpush_back
2) é incomum e faz o leitor parar e pensar 3) é uma pessimização prematura.Em 2016 houve uma proposta para ter um "
inserter
iterador de argumento único ". https://isocpp.org/files/papers/p0471r0.html . Não consegui descobrir se a proposta avançou. Eu acho que faz sentido.Por enquanto, você pode ter este comportamento definindo a função do fabricante:
Usado como:
fonte
insert_iterator::operator=
). Deveria?insert
(eend
). parece queforward_list
não tem umainsert
operação em primeiro lugar, apenasinsert_after
. E mesmo que seja alterado, não pode ser inserido após o final, eu acho. Você não pode usar umstd::list
?NewContaner new_container(old_other_container.begin(), old_other_container.end())
.existing_list = std::list(c.begin(), c.end(), existing_list.get_allocator())
Muito bom, acho que essa é a minha resposta. Felicidades!