2010-02-27 81 views
5

Tôi có một số mã C, trong đó có hai danh sách được liên kết (nói A và B) và A được chèn tại một vị trí cụ thể vào B và A vẫn có các phần tử.C++ Hành vi danh sách liên kết

Làm cách nào để mô phỏng cùng một hành vi hiệu quả bằng cách sử dụng C++ STL? Nếu tôi thử ghép, nó làm cho cái thứ hai trống rỗng.

Cảm ơn, Gokul.

Trả lời

2

Bạn cần sao chép các phần tử. Hãy xem xét một cái gì đó như thế này:

std::copy(a.begin(), a.end(), std::inserter(b, b_iterator)); 

Nếu bạn muốn các nút cùng chia sẻ bởi hai danh sách, điều này chỉ đơn giản là không được hỗ trợ bởi std::list (STL container luôn có quyền sở hữu độc quyền). Bạn có thể tránh sao chép các phần tử bằng cách lưu trữ con trỏ trong danh sách hoặc bằng cách sử dụng boost::ptr_list, trong đó lưu trữ nội bộ con trỏ nhưng cung cấp API đẹp hơn.

+0

Lưu ý rằng có khả năng chậm hơn so với giải pháp khác (http://stackoverflow.com/questions/2349098/2349119#2349119). Xem các nhận xét tại http://stackoverflow.com/questions/2551775/2551808#2551808 vì lý do đó. – sbi

7

Hãy thử chèn:

B.insert(position, A.begin(), A.end()); 

để chèn các bản sao của các phần tử của A trong B trước khi 'vị trí'. Bản thân nó vẫn không thay đổi. Xem này link

+0

+1 câu trả lời hay hơn tôi. – Tronic

+0

@Tronic: Cảm ơn bạn. – Arun