คำตอบโดยตรง:
เราสามารถใช้ฟังก์ชั่นสมาชิกสาธารณะstd::vector::operator=
ของภาชนะstd::vector
สำหรับการกำหนดค่าจากเวกเตอร์ไปยังอีก
นอกจากนี้ฟังก์ชั่นคอนสตรัคยังทำให้รู้สึก ฟังก์ชั่นตัวสร้างที่มีเวกเตอร์อื่นเป็นพารามิเตอร์ (เช่นx
) สร้างภาชนะที่มีสำเนาของแต่ละองค์ประกอบในx
ในลำดับเดียวกัน
ข้อควรระวัง:
- ไม่ได้ใช้
std::vector::swap
std::vector::swap
ไม่ได้คัดลอกเวกเตอร์ไปยังอีกมันเป็นจริงการแลกเปลี่ยนองค์ประกอบของสองเวกเตอร์เช่นเดียวกับชื่อของมันแสดงให้เห็น กล่าวอีกนัยหนึ่งเวกเตอร์แหล่งที่มาเพื่อคัดลอกถูกแก้ไขหลังจากstd::vector::swap
ถูกเรียกใช้ซึ่งอาจไม่ใช่สิ่งที่คุณคาดหวัง
หากองค์ประกอบในเวกเตอร์แหล่งที่มาเป็นตัวชี้ไปยังข้อมูลอื่นดังนั้นบางครั้งก็ต้องการสำเนาลึก
ตามวิกิพีเดีย:
สำเนาลึกหมายถึงฟิลด์ถูกยกเลิกการอ้างอิง: แทนที่การอ้างอิงไปยังวัตถุที่ถูกคัดลอกวัตถุคัดลอกใหม่จะถูกสร้างขึ้นสำหรับวัตถุที่อ้างอิงใด ๆ และการอ้างอิงถึงสิ่งเหล่านี้ที่อยู่ใน B
ที่จริงแล้วในปัจจุบันไม่มีวิธีในตัวใน C ++ ที่จะทำสำเนาลึก ทุกวิธีที่กล่าวมาข้างต้นเป็นแบบตื้น หากจำเป็นต้องทำสำเนาลึกคุณสามารถสำรวจเวกเตอร์และทำสำเนาข้อมูลอ้างอิงด้วยตนเอง นอกจากนี้ยังสามารถพิจารณาตัววนซ้ำสำหรับการแวะผ่าน การอภิปรายเกี่ยวกับตัววนซ้ำเกินกว่าคำถามนี้
อ้างอิง
หน้าของstd::vector
บน cplusplus.com