Doğrudan cevap:
Bir vektörden diğerine değerler atamak std::vector::operator=
için kabın genel üye işlevini kullanabiliriz std::vector
.
Ayrıca, bir yapıcı işlevi de mantıklıdır. Parametre (ör. x
) Olarak başka bir vektör içeren yapıcı işlevi , öğelerin her birinin kopyasını x
aynı sırayla içeren bir kap oluşturur .
Dikkat:
- Kullanmayın
std::vector::swap
std::vector::swap
değil kopyalama başka bir vektör, aslında Adından da anlaşılacağı gibi, iki vektörün elemanları takas edilir. Başka bir deyişle, kopyalanacak kaynak vektör sonra değiştirilir std::vector::swap
, muhtemelen beklediğiniz gibi değildir.
Kaynak vektördeki elemanlar diğer verilere işaret ederse, bazen derin bir kopya istenir.
Vikipedi göre:
Derin bir kopya, yani alanların kaydı kaldırılmıştır: kopyalanan nesnelere başvurular yerine, başvurulan nesneler için yeni kopya nesneleri ve B'ye yerleştirilen bu nesnelere başvurular.
Aslında, şu anda C ++ 'da derin bir kopya yapmak için yerleşik bir yol yoktur. Yukarıda belirtilen tüm yollar sığdır. Derin bir kopya gerekiyorsa, bir vektörde gezinebilir ve referansları manuel olarak kopyalayabilirsiniz. Alternatif olarak, çaprazlama için bir yineleyici düşünülebilir. Yineleyici tartışma bu sorunun ötesindedir.
Referanslar
std::vector
Cplusplus.com sayfasının sayfası