Trả lời trực tiếp:
Chúng ta có thể sử dụng hàm thành viên công cộng std::vector::operator=
của vùng chứa std::vector
để gán giá trị từ một vectơ cho một vectơ khác.
Bên cạnh đó, một hàm xây dựng cũng có ý nghĩa. Hàm xây dựng với một vectơ khác là tham số (ví dụ x
) xây dựng một thùng chứa với một bản sao của từng phần tử trong x
cùng một thứ tự.
Chú ý:
- Không được dùng
std::vector::swap
std::vector::swap
không sao chép một vectơ sang một vectơ khác, nó thực sự là các phần tử hoán đổi của hai vectơ, đúng như tên gọi của nó. Nói cách khác, vectơ nguồn để sao chép từ được sửa đổi sau khi std::vector::swap
được gọi, đây có thể không phải là điều bạn mong đợi.
Nếu các phần tử trong vectơ nguồn là con trỏ tới dữ liệu khác, thì đôi khi cần một bản sao sâu.
Theo wikipedia:
Một bản sao sâu, có nghĩa là các trường bị hủy đăng ký: thay vì tham chiếu đến các đối tượng được sao chép, các đối tượng sao chép mới được tạo cho bất kỳ đối tượng được tham chiếu nào và các tham chiếu đến các đối tượng được đặt trong B.
Trên thực tế, hiện tại không có cách tích hợp sẵn trong C ++ để thực hiện một bản sao sâu. Tất cả các cách được đề cập ở trên là nông. Nếu một bản sao sâu là cần thiết, bạn có thể duyệt qua một vectơ và tạo bản sao của các tài liệu tham khảo theo cách thủ công. Ngoài ra, một iterator có thể được xem xét để duyệt qua. Thảo luận về iterator nằm ngoài câu hỏi này.
Người giới thiệu
Trang std::vector
trên cplusplus.com