Resposta direta:
Podemos usar a função std::vector::operator=de membro pública do contêiner std::vectorpara atribuir valores de um vetor para outro.
- Use uma função construtora
Além disso, uma função construtora também faz sentido. Uma função construtora com outro vetor como parâmetro (por exemplo x) constrói um contêiner com uma cópia de cada um dos elementos x, na mesma ordem.
Cuidado:
- Não use
std::vector::swap
std::vector::swapnão está copiando um vetor para outro, na verdade está trocando elementos de dois vetores, exatamente como o nome sugere. Em outras palavras, o vetor de origem para copiar é modificado após std::vector::swapser chamado, o que provavelmente não é o que você espera.
Se os elementos no vetor de origem são ponteiros para outros dados, algumas vezes é necessária uma cópia em profundidade.
De acordo com a wikipedia:
Uma cópia profunda, significando que os campos são desreferenciados: em vez de referências a objetos que estão sendo copiados, novos objetos de cópia são criados para quaisquer objetos referenciados e referências a esses colocados em B.
Atualmente, não há atualmente uma maneira interna em C ++ para fazer uma cópia profunda. Todas as formas mencionadas acima são superficiais. Se uma cópia profunda for necessária, você pode percorrer um vetor e fazer cópia das referências manualmente. Como alternativa, um iterador pode ser considerado para atravessar. A discussão sobre o iterador está além desta questão.
Referências
A página de std::vectorem cplusplus.com